第六章 二叉树 part06
大纲
● 654.最大二叉树
● 617.合并二叉树
● 700.二叉搜索树中的搜索
● 98.验证二叉搜索树
leetcode 654
最大二叉树
代码
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
if (nums.length == 0) return null;
int index = maxIndex(nums);
TreeNode node = new TreeNode(nums[index]);
node.left = constructMaximumBinaryTree(Arrays.copyOfRange(nums, 0, index));
node.right = constructMaximumBinaryTree(Arrays.copyOfRange(nums, index + 1, nums.length));
return node;
}
public int maxIndex(int[] nums) {
int index = 0, val = -1;
for (int i = 0; i < nums.length; i++)
if (nums[i] > val) {
index = i;
val = nums[i];
}
return index;
}
}
leetcode 617
合并二叉树
代码
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;
}
}
leetcode 700
二叉搜索树中的搜索
代码
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if (root == null) return null;
if (root.val > val) return searchBST(root.left, val);
else if (root.val < val) return searchBST(root.right, val);
else return root;
}
}
leetcode 98
验证二叉搜索树
代码
class Solution {
public boolean isValidBST(TreeNode root) {
return valid(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean valid(TreeNode node, long min, long max) {
if (node == null) return true;
if (node.val >= max || node.val <= min) return false;
return valid(node.left, min, node.val) && valid(node.right, node.val, max);
}
}