669. 修剪二叉搜索树
代码实现:
var trimBST = function (root, low, high) {
if (!root) return null
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.将有序数组转换为二叉搜索树
本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间。
代码实现:
var sortedArrayToBST = function (nums) {
let left = 0, right = nums.length - 1
const traversal = (nums, left, right) => {
if (left > right) return null;
let mid = Math.floor(left + (right - left) / 2)
let node = new TreeNode(nums[mid])
node.left = traversal(nums, left, mid - 1)
node.right = traversal(nums, mid + 1, right)
return node
}
return traversal(nums, left, right)
};
538.把二叉搜索树转换为累加树
其实这就是一棵树,大家可能看起来有点别扭,换一个角度来看,这就是一个有序数组[2, 5, 13],求从后到前的累加数组,也就是[20, 18, 13],是不是感觉这就简单了。
代码实现:
//递归
var convertBST = function (root) {
let pre = 0;
const traversal = (root) => {
if (root === null) return;
traversal(root.right);
root.val += pre;
pre = root.val
traversal(root.left)
}
traversal(root)
return root
};
//迭代
var convertBST = function (root) {
let pre = 0;
let cur = root
let stack = [];
while (cur || stack.length) {
while (cur) {
stack.push(cur)
cur = cur.right
}
cur = stack.pop();
cur.val += pre
pre = cur.val
cur = cur.left
}
return root
};
总结
二叉树章节 正式结束,进入回溯章节 ,继续加油!!!坚持