day23 669 108 538

669. 修剪二叉搜索树

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root==null) return null;

        if(root.val>high){   //比high还大 就递归左边的  右边 不要了
            return trimBST(root.left,low,high);
        }else if(root.val<low){  //相反 比low 还小就 就递归左边的 
            return trimBST(root.right,low,high);  //在low 和high的范围内 就正常递归
        }else{
            root.left= trimBST(root.left,low,high);
            root.right=trimBST(root.right,low,high);
            return root;
        }

    }
}

108

class Solution {
    
    public TreeNode sortedArrayToBST(int[] nums) {
       
        return dfs(nums,0,nums.length);
    }
    

    public TreeNode dfs(int[] nums,int left,int right){
        
        if(left>=right) return null;
        int mid=(left+right)/2;
        TreeNode node =new TreeNode(nums[mid]);//因为是二叉搜索树  所以  从上向下构造的时候  选数组中间的就是 下一个要构造的节点
        node.left=dfs(nums,left,mid);
        node.right=dfs(nums,mid+1,right);
        return node;
    }

    
}

538

class Solution {
    int sum=0;
    public TreeNode convertBST(TreeNode root) {
        dfs(root);
        return root;
    }
    public void dfs(TreeNode root){       
        if(root==null){
            return;
        }

        dfs(root.right);    //先右 
        root.val+=sum;   //更新root 的值
        sum=root.val;    //用sum  记录 之前的和
        dfs(root.left);   //递归左

    }

}

posted on 2022-10-13 21:03  你是千堆雪我是长街7  阅读(11)  评论(0)    收藏  举报

导航