leetcode 654 最大二叉树
public static TreeNode constructMaximumBinaryTree(int[] nums){
TreeNode result = null;
if(nums.length==0) return null;
HashMap<Integer, Integer> hashMap = new HashMap<>();
for(int i=0;i<nums.length;i++){
hashMap.put(nums[i],i);
}
result=constructSubs(nums,0,nums.length-1,hashMap);//map最后没用上啊!!!
return result;
}
private static TreeNode constructSubs(int[] nums,int start, int end,HashMap<Integer,Integer> hashMap) {
if(start>end) return null;
int max=start;
for(int i=start;i<=end;i++){
if(nums[i]>nums[max]){
max=i;
}
}
//int index= hashMap.get(max);
TreeNode root = new TreeNode(nums[max]);
int startL =start;
int endL=max-1;
root.left = constructSubs(nums,startL,endL,hashMap);
int startR = max+1;
int endR = end;
root.right = constructSubs(nums,startR,endR,hashMap);
return root;
}
617 合并二叉树
这个真是简单
public static TreeNode mergeTrees(TreeNode root1,TreeNode root2){
if(root1==null&& root2==null) return null;
if(root1!=null&& root2==null) return root1;
if(root1==null&& root2!=null) return root2;
TreeNode newRoot= new TreeNode(root1.val+root2.val);
newRoot.left =mergeTrees(root1.left,root2.left);
newRoot.right =mergeTrees(root1.right,root2.right);
return newRoot;
}
700 搜索二叉树 最简单的了
98 验证二叉树
感觉我的代码需要优化
public static boolean isValidBST(TreeNode root){
if(root==null) return true;
boolean resL=true;
boolean resR=true;
if(root.left!=null){
if(root.left.val<root.val) {
if(root.left.right!=null){
resL=isValidBSTSubRight(root.left,root);
}
resL = resL && isValidBST(root.left);
}else{
resL=false;
}
}
if(root.right!=null){
if( root.right.val>root.val) {
if(root.right.left!=null){
resR=isValidBSTSubLeft(root.right,root);
}
resR = resR && isValidBST(root.right);
}else{
resR=false;
}
}
return resL&&resR;
}
//左侧的右节点
private static boolean isValidBSTSubRight(TreeNode left, TreeNode root) {
TreeNode tmp=left;
do{
if(tmp.val>=root.val)
return false;
tmp = tmp.right;
}while(tmp!=null);
return true;
}
// 右侧左节点
private static boolean isValidBSTSubLeft(TreeNode right, TreeNode root) {
TreeNode tmp=right;
do {
if (tmp.val <= root.val)
return false;
tmp = tmp.left;
} while (tmp != null);
return true;
}