代码随想录刷题训练营DAY 20| 二叉树06 654. 最大二叉树 617. 合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树---火腿


一、654. 最大二叉树

给定一个不重复的整数数组 nums 。 
最大二叉树 可以用下面的算法从 nums 递归地构建:

创建一个根节点,其值为 nums 中的最大值。
递归地在最大值 左边 的 子数组前缀上 构建左子树。
递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums 构建的 最大二叉树 。
class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        // construct; findMax
        TreeNode root = construct(nums, 0, nums.length-1);
        return root;
    }
    private static TreeNode construct(int []arry, int start, int end){
        if(start>end){
            return null;
        }
        if(start==end){
            return  new TreeNode(arry[start]);
        }
        int idx= findMax(arry, start,end);
        TreeNode root = new TreeNode(arry[idx]);
        root.left = construct(arry, start, idx-1);
        root.right = construct(arry, idx+1, end);

        return root;
    }
    private static int findMax(int []arr, int start, int end){
        int idx=-1;
        int max = Integer.MIN_VALUE;
        for(int i =start; i<=end; i++){
            if(arr[i]>max){
                max=arr[i];
                idx=i;
            }
        }
        return idx;
    }
}

二、617. 合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。
你需要将这两棵树合并成一棵新二叉树。
合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1 ==null){
            return root2;
        }
        if(root2==null){
            return root1;
        }
        root1.val+=root2.val;
        root1.left=mergeTrees(root1.left,root2.left);
        root1.right=mergeTrees(root1.right, root2.right);
        return root1;
    }
}

三 丶700. 二叉搜索树中的搜索

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

四、 98. 验证二叉搜索树

class Solution {
    public boolean isValidBST(TreeNode root) {
        return validate(root,null,null);
    }
    public boolean validate(TreeNode root, Integer low, Integer high){
        if(root==null)
            return true;
        if((low!=null && root.val<=low) || (high!=null && root.val>=high))
            return false;
        return validate(root.left,low,root.val)&&validate(root.right,root.val,high);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值