剩下的题(2021-7-20)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值