class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return build(nums, 0, nums.length - 1);
}
public TreeNode build(int[] nums, int startIndex, int endIndex) {
if (startIndex > endIndex) return null;
int index = maxElementIndex(nums, startIndex, endIndex);
TreeNode newNode = new TreeNode(nums[index]);
newNode.left = build(nums, startIndex, index - 1);
newNode.right = build(nums, index + 1, endIndex);
return newNode;
}
public int maxElementIndex(int[] nums, int startIndex, int endIndex) {
int maxIndex = startIndex;
for (int i = startIndex + 1; i <= endIndex; i++) {
maxIndex = nums[maxIndex] < nums[i] ? i : maxIndex;
}
return maxIndex;
}
}
617.合并二叉树
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if (root1 == null) return root2;
if (root2 == null) return root1;
return new TreeNode(root1.val + root2.val,
mergeTrees(root1.left, root2.left), // 合并左子树
mergeTrees(root1.right, root2.right)); // 合并右子树
}
}
classSolution{publicbooleanisValidBST(TreeNode root){returnisValidBST(root,Long.MIN_VALUE,Long.MAX_VALUE);}privatebooleanisValidBST(TreeNode node,long left,long right){if(node ==null)returntrue;long x = node.val;return left < x && x < right &&isValidBST(node.left, left, x)&&isValidBST(node.right, x, right);}}