669.修剪二叉搜索树
108.将有序数组转换为二叉搜索树
538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树
var trimBST = function(root, low, high) {
if (!root) 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. 将有序数组转换为二叉搜索树
- key:区间思想 & 循环不变量
p.s. 截取区间,而不是直接传子区间
var sortedArrayToBST = function(nums) {
const traverse = (left, right) => {
if (left > right) return null;
const mid = left + Math.floor((right - left)/2);
const node = new TreeNode(nums[mid]);
node.left = traverse(left, mid-1);
node.right = traverse(mid+1, right);
return node;
}
return traverse(0, nums.length-1);
};
538. 把二叉搜索树转换为累加树
var convertBST = function(root) {
let pre = 0;
const tranverse = (node) => {
if (!node) return;
tranverse(node.right);
node.val += pre;
pre = node.val;
tranverse(node.left);
}
tranverse(root);
return root;
};