669. 修剪二叉搜索树(与18天的450题一样)
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);
}else 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 toBST(nums, 0, nums.length - 1);
}
private TreeNode toBST(int[] nums, int left, int right){
if(left>right) return null;
int mid = (left + right)/2;
TreeNode root = new TreeNode(nums[mid]);
root.left = toBST(nums, left, mid-1);
root.right = toBST(nums, mid+1, right);
return root;
}
}
538.把二叉搜索树转换为累加树
class Solution {
public TreeNode convertBST(TreeNode root) {
convert(root, 0);
return root;
}
private int convert(TreeNode node, int sum){
if(node==null) return sum;
sum = convert(node.right, sum);
node.val += sum;
sum = node.val;
sum = convert(node.left, sum);
return sum;
}
}
总结篇