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) 收藏 举报