1.旋转数组的最小数字
import java.util.ArrayList;
public class Solution{
public int minNumberInRotateArray(int [] array){
if(array==null||array.length==0){return -1;}
int left=0;
int right=array.length-1;
while(left<right){
int mid=(left+right)/2;
if(array[mid]>array[right]){
left=mid+1;
}else{
right=mid;
}
}
return array[left];
}
}
思路:1.二分法:定义left=0; right=array.length-1;
mid=(left+right)/2;
2.如果array[mid]>array[right]时,left=mid+1;
2.树的子结构
public class Solution{
public boolean HasSubtree(TreeNode root1,TreeNode root2){
if(root2==null||root1==null) return false;
if(root1.val==root2.val&&isSame(root1,root2)==true) return true;
return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
}
public boolean isSame(TreeNode root1,TreeNode root2){
if(root2==null) return true;
if(root1==null) retrun false;
if(root1.val!=root2.val) return false;
return isSame(root1.left,root2.left)&&isSame(root1.right,root2.right);
}
}
思路:首先需要判断A,B的根节点是否一样。
1.如果一样,在判断A,B左右子节点
2.如果不一样,判断A的左子树和B的根节点是否一样,同理可判断A的右子树和B的根节点是否一样。
3.二叉树镜像
public class Solution{
public TreeNode Mirror(TreeNode pRoot){
if(pRoot==null) return null;
TreeNode temp=pRoot.left;
pRoot.left=pRoot.right;
pRoot.right=temp;
Mirror(pRoot.left);
Mirror(pRoot.right);
return pRoot;
}
}
思路:采用的递归
根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左/右子节点,即可生成二叉树的镜像。
1.判断:如果pRoot为空,返回空
2.交换左右子树
3.把pRoot的左子树放到Mirror中镜像一下
4.把pRoot的右子树放到Mirror中镜像一下
5.返回根节点root