修剪二叉搜索树
leetcode链接:leetcode.cn/problems/tr…
平衡二叉树是指该树所有节点的左右子树的深度相差不超过1
需要递归处理待删除节点的左右子树,当前节点的值小于low时,右子树可能会存在符合区间的节点;当前节点的值大于high时,左子树可能会存在符合区间的节点
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;
};
将有序数组转换为二叉搜索树
leetcode链接:leetcode.cn/problems/co…
var sortedArrayToBST = function(nums) {
// 区间是[left, right]
let dfs = (nums, left, right) => {
if (left > right) return null;
let mid = Math.floor((right - left) / 2) + left;
let newNode = new TreeNode(nums[mid]);
newNode.left = dfs(nums, left, mid - 1);
newNode.right = dfs(nums, mid + 1, right);
return newNode;
}
return dfs(nums, 0, nums.length - 1);
};
把二叉搜索树转换为累加树
leetcodel链接:leetcode.cn/problems/co…
使用双指针,找到搜索二叉树中的最大值,然后递归遍历更新节点的值
var convertBST = function(root) {
let pre = 0;
let dfs = (cur) => {
if (cur === null) return;
dfs(cur.right); // 右
// 中
cur.val += pre;
pre = cur.val;
dfs(cur.left); // 左
}
dfs(root);
return root;
};