代码随想录day20|654. 最大二叉树617. 合并二叉树
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return maxTree(nums, 0, nums.length - 1);
}
public TreeNode maxTree(int[] nums, int l, int r){
if(l > r){
return null;
}
int bond = findMax(nums, l, r);
TreeNode root = new TreeNode(nums[bond]);
root.left = maxTree(nums, l, bond - 1);
root.right = maxTree(nums, bond + 1, r);
return root;
}
public int findMax(int[] nums, int l, int r){
int max = Integer.MIN_VALUE, maxIndex = l;
for(int i = l; i <= r; i++){
if(max < nums[i]){
max = nums[i];
maxIndex = i;
}
}
return maxIndex;
}
}
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;
}
}
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root == null )return root;
if(root.val > val)return searchBST(root.left,val);
if(root.val < val)return searchBST(root.right,val);
return root;
}
}
class Solution {
public boolean isValidBST(TreeNode root) {
return isValidBST(Long.MIN_VALUE,Long.MAX_VALUE , root);
}
boolean isValidBST(long min , long max,TreeNode node){
if(node == null)return true;
if(node.val <= min || node.val >= max)return false;
return isValidBST(min,node.val,node.left) && isValidBST(node.val , max , node.right);
}
}