打卡第十九天

654. 最大二叉树

如果是构造二叉树,就优先考虑用前序遍历,先处理根节点再处理左右节点,然后三部曲第一确定返回值类型和参数列表,构造二叉树一定是返回treenode,参数列表就是数组,终止条件是因为数组大小大于等于1,因此当数组大小等于1时,return new TreeNode(val);中间逻辑,

for(int i=start;i<end;i++){
            if(num[i]>max){
                max=num[i];
                index=i;
            }

        }
        TreeNode root=new TreeNode(max);
        root.left=dfs(num,start,index);
        root.right=dfs(num,index+1,end);
        return root;

因为终止条件为数组条件等于1时,所以只有当index>=1才能构建左子树,当end-index大于等于一才能构建右子树

617. 合并二叉树

这道题主要是同时操作两个二叉树,我的思路是返回值是treenode,参数列表也是两个treenode,

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1==null&&root2==null){
            return null;
        }
        TreeNode root=new TreeNode();
        if(root1==null&&root2!=null){
            root=new TreeNode(root2.val);
            root.left=mergeTrees(root1,root2.left);
            root.right=mergeTrees(root1,root2.right);
        }
       else if(root2==null&&root1!=null){
            root=new TreeNode(root1.val);
            root.left=mergeTrees(root1.left,root2);
            root.right=mergeTrees(root1.right,root2);
        }
        else{
            root=new TreeNode(root1.val+root2.val);
            root.left=mergeTrees(root1.left,root2.left);
            root.right=mergeTrees(root1.right,root2.right);
        }
        return root;
        

    }
}

就是将将两个根节点相加,然后分别构建左子树(两个根节点的左子树)和右子树(两个根节点的右子树)然后考虑终止条件(节点为null)的处理方法,卡哥的代码更简洁,终止条件(第一个节点为空就返回第二个节点)第二个节点为空就返回第一个节点,即发现有一个节点为空就把另一个节点直接迁移过来了,我是要把所有节点遍历并相加,显得更臃肿。

700. 二叉搜索树中的搜索

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
      if(root==null){
        return null;
      }
      
      if(root.val==val){
        return root;
      }
      TreeNode left=searchBST(root.left,val);
      TreeNode right=searchBST(root.right,val);
      if(left==null&&right==null){
        return null;
      }
      return left==null?right:left;

    }
}

我的代码看起来简洁,但是其实没考虑到BST的特性,我是在递归的过程中把整个树搜素了一遍,来查找是否存在对应值,但是应该利用BST的特性的,如果值小于根节点的值就搜索左边,大于搜索右子树,我选择遍历整个树是考虑到可能一个值小于跟,但是它可能等于右子树的左子树的值,但是我这样想是错误的,如果这样的话,BST是会发生变化的,如果想找比根节点小的树就从左子树找,别找右子树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值