第六章 二叉树part09
大纲
● 669. 修剪二叉搜索树
● 108.将有序数组转换为二叉搜索树
● 538.把二叉搜索树转换为累加树
leetcode 669
修剪二叉搜索树
代码
class Solution {
public TreeNode trimBST(TreeNode root, int low, int high) {
if (root == null) return null;
root.left = trimBST(root.left, low, high);
root.right = trimBST(root.right, low, high);
if (root.val < low || root.val > high) root = deleteNode(root);
return root;
}
public TreeNode deleteNode(TreeNode root) {
if (root.left == null) return root.right;
else if (root.right == null) return root.left;
else {
TreeNode node = root.right;
while (node.left != null) node = node.left;
node.left = root.left;
root = root.right;
}
return root;
}
}
leetcode 108
将有序数组转换为二叉搜索树
代码
class Solution {
public TreeNode sortedArrayToBST(int[] nums) {
return build(nums, 0, nums.length - 1);
}
public TreeNode build(int[] nums, int start, int end) {
if (start > end) return null;
int mid = start + end >> 1;
TreeNode root = new TreeNode(nums[mid]);
root.left = build(nums, start, mid - 1);
root.right = build(nums, mid + 1, end);
return root;
}
}
leetcode 538
把二叉搜索树转换为累加树
代码
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
if (root == null) return null;
convertBST(root.right);
sum += root.val;
root.val = sum;
convertBST(root.left);
return root;
}
}