Rubyr代码随想录算法训练营第20天| 654.最大二叉树 、617.合并二叉树 、 700.二叉搜索树中的搜索 、98.验证二叉搜索树

本文介绍了四个LeetCode题目,涉及最大二叉树构造、合并两个二叉树、在BST中搜索值以及验证BST的性质,展示了二叉树操作的递归实现。
摘要由CSDN通过智能技术生成

Leetcode 654.最大二叉树 

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        if (nums.length == 1) {
            return new TreeNode(nums[0]);
        }

        return build(nums, 0, nums.length - 1);


    }

    public TreeNode build(int[] nums, int left, int right) {
        if (left > right) {
            return null;
        }

        int maxVal = Integer.MIN_VALUE;
        int index = -1;

        for (int i = left; i <= right; i++) {
            if (maxVal < nums[i]) {
                maxVal = nums[i];
                index = i;
            }
        }

        TreeNode root = new TreeNode(maxVal);

        root.left = build(nums, left, index - 1);
        root.right = build(nums, index + 1, right);

        return root;
    }
}

Leetcode 617.合并二叉树 

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null && root2 == null) {
            return null;
        } else if (root1 == null) {
            return root2;

        } else if (root2 == null) {
            return root1;
        }

        TreeNode newroot = new TreeNode(root1.val + root2.val);
        newroot.left = mergeTrees(root1.left, root2.left);
        newroot.right = mergeTrees(root1.right, root2.right);

        return newroot;

    }
}

Leetcode 700.二叉搜索树中的搜索 

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if (root == null) {
            return root;
        }

        int rootVal = root.val;

        if (rootVal == val) {
            return root;
        } else if (rootVal < val) {
           return searchBST(root.right, val);
        } 

        return searchBST(root.left, val);

    }
}

Leetcode 98.验证二叉搜索树 

二叉搜索树,中序遍历是一个递增序列,所以根节点比所有左子树的节点都大,比所有右子树的节点都小。

class Solution {
    boolean result = true;

    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }

        return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);
        
    }

    public boolean isValid(TreeNode root, long minVal, long maxVal) {
        if (root == null) {
            return true;
        }

        if (root.val <= minVal || root.val >= maxVal) {
            return false;
        }

        return isValid(root.left, minVal, root.val) && isValid(root.right, root.val, maxVal);
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值