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

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

一、654.最大二叉树

题目链接:https://leetcode.cn/problems/maximum-binary-tree/
思路:前序遍历,然后划分数组,挑选最大值。

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return create(nums, 0, nums.length - 1);
    }
    TreeNode create(int[] nums, int left, int right) {
        if (left > right) {
            return null;
        }
        int max = -1, index = -1;
        for (int i = left; i <= right; i++) {
            if (nums[i] > max) {
                max = nums[i];
                index = i;
            }
        }
        TreeNode node = new TreeNode(max);
        node.left = create(nums, left, index - 1);
        node.right = create(nums, index + 1, right);
        return node;
    }
}

二、617.合并二叉树

题目链接:https://leetcode.cn/problems/merge-two-binary-trees/
思路:用一个树往另一个树上合并即可。层序遍历也可以。

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.二叉搜索树中的搜索

题目链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/
思路:利用二叉搜索树的特性来一路向下搜索。

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

四、98.验证二叉搜索树

题目链接:https://leetcode.cn/problems/validate-binary-search-tree/
思路:注意最小值。

class Solution {
    long pro = Long.MIN_VALUE;
    public boolean isValidBST(TreeNode root) {
        if (root == null) return true;
        boolean left = isValidBST(root.left);
        if (root.val <= pro) return false;
        pro = root.val;
        boolean right = isValidBST(root.right);
        return left && right;
    }
}

你可能感兴趣的:(力扣算法题,算法,数据结构)