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);
}
}