669. 修剪二叉搜索树
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if(root == null)return root;
if(root.val < low){
return trimBST(root.right,low,high);
}
if(root.val > high){
return trimBST(root.left,low,high);
}
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 recrusion(nums,0,nums.length );
}
private TreeNode recrusion(int[]nums,int left ,int right){
if(left >= right)return null;
if(right - left == 1)return new TreeNode(nums[left]);
int mid = (right - left) / 2 + left;
TreeNode root = new TreeNode(nums[mid]);
//左闭右开
root.left = recrusion(nums,left,mid);
root.right = recrusion(nums,mid + 1,right);
return root;
}
}
左闭右闭
麻烦一点,在mid == left时不加判断会越界。
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
//左闭右开
return recrusion(nums,0,nums.length - 1 );
}
private TreeNode recrusion(int[]nums,int left ,int right){
if(left > right)return null;
if(right - left == 0)return new TreeNode(nums[left]);
int mid = (right - left) / 2 + left;
TreeNode root = new TreeNode(nums[mid]);
//左闭右开
if(mid != left)root.left = recrusion(nums,left,mid - 1);
root.right = recrusion(nums,mid + 1,right);
return root;
}
}
538.把二叉搜索树转换为累加树
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
recrusion(root);
return root;
}
public void recrusion(TreeNode root){
if(root == null)return ;
recrusion(root.right);
sum += root.val;
root.val = sum;
recrusion(root.left);
}
}