654.最大二叉树
力扣题目链接:. - 力扣(LeetCode)
前序递归、循环不变量
class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return findmax(nums,0,nums.length);}public TreeNode findmax(int[] nums,int leftindex,int rightindex){if(rightindex==leftindex){return null;}if(rightindex-leftindex==1){return new TreeNode(nums[leftindex]);}int max=nums[leftindex];int maxindex=leftindex;for(int i=leftindex;i<rightindex;i++){if(nums[i]>max){max=nums[i];maxindex=i;}}TreeNode root=new TreeNode(max);root.left=findmax(nums,leftindex,maxindex);root.right=findmax(nums,maxindex+1,rightindex);return root;}
}
617.合并二叉树
力扣题目链接:. - 力扣(LeetCode)
前序递归
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.二叉搜索树中的搜索
力扣题目链接:. - 力扣(LeetCode)
class Solution {public TreeNode searchBST(TreeNode root, int val) {if(root==null){return null;}if(val>root.val){return searchBST(root.right,val);}if(val<root.val){return searchBST(root.left,val);}return root;}
}
98.验证二叉搜索树
力扣题目链接:. - 力扣(LeetCode)
中序递归
class Solution {public boolean isValidBST(TreeNode root) {List<Integer> res=new ArrayList<>();midorder(root,res);for(int i=0;i<res.size()-1;i++){if(res.get(i)>=res.get(i+1)){return false;}}return true;}public void midorder(TreeNode root,List<Integer> res){if(root==null){return;}midorder(root.left,res);res.add(root.val);midorder(root.right,res);}
}