一、[654]最大二叉树
注意:可以与后序中序建树一起写,思想类似
java
class Solution {
public TreeNode constructMaximumBinaryTree(int[] nums) {
return traversal(nums,0, nums.length);
}
TreeNode traversal(int[] nums,int begin,int end){
//左闭右开
if(begin>=end){
return null;
}
if(end-begin==1){
return new TreeNode(nums[begin]);
}
int max=nums[begin];
int index=begin;
for(int i=begin;i<end;i++){
if(nums[i]>max){
max=nums[i];
index=i;
}
}
TreeNode root=new TreeNode(max);
root.left=traversal(nums,begin,index);
root.right=traversal(nums,index+1,end);
return root;
}
}
二、[617]合并二叉树
注意:也可以新建树来存储节点
java
class Solution {
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if(root1==null){
return root2;
}
if(root2==null){
return root1;
}
root1.val= root1.val+ root2.val;
root1.left=mergeTrees(root1.left,root2.left);
root1.right=mergeTrees(root1.right,root2.right);
return root1;
}
}
三、[700]二叉搜索树中的搜索
重点;利用二叉搜索树的特性
本题解法多样。
java
class Solution {
public TreeNode searchBST(TreeNode root, int val) {
if(root==null||root.val==val){
return root;
}
if(val<root.val){
return searchBST(root.left,val);
}else{
return searchBST(root.right,val);
}
}
}
四、[98]验证二叉搜索树
重点:类似于数组的双指针
中序遍历!!!
java
class Solution {
TreeNode pre=null;
public boolean isValidBST(TreeNode root) {
if(root==null){
return true;
}
//中序遍历!!!!
//搜索树一般都为中序遍历
boolean l = isValidBST(root.left);
if(pre!=null&&pre.val>=root.val)
{
return false;
}
pre= root;
boolean r = isValidBST(root.right);
return l&&r;
}
}