持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情🚀🚀
669. 修剪二叉搜索树 - 力扣(LeetCode)
递归
var trimBST = function(root, low, high) {
if(!root)
return null
if(root.val < low){
return root.left = trimBST(root.right,low,high);
}
if(root.val > high){
return root.right = trimBST(root.left,low,high);
}
root.left = trimBST(root.left,low,high)
root.right = trimBST(root.right,low,high)
return root
};
注意
这种重构二叉树结构的题,其实难度也有限。
找到与条件不符合的点之后,就进行结点的删除,以及判断要删除结点的结构中有没有是在条件范围内的,并将其返回。
总之没有想象中那么难了~
108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)
递归
var sortedArrayToBST = function(nums) {
if(nums.length == 0 ) return null
const dfs = (nums) => {
let left = 0;
let right = nums.length-1;
let mid = Math.floor((left+right) / 2);
let root = new TreeNode(nums[mid])
if(left > right) return null;
else{
root.left = dfs(nums.slice(left,mid))
root.right = dfs(nums.slice(mid+1))
return root;
}
}
return dfs(nums);
};
难点
这道题的难点就在,首先要思考如何重构一个二叉搜索树,所以这里就用二叉树的特性,小的放左边,大的放右边。
root.left = dfs(nums.slice(left,mid))
root.right = dfs(nums.slice(mid+1))
另外一个难点就是如何处理边界了,这里注意一下slice的使用即可。
538. 把二叉搜索树转换为累加树
递归
var convertBST = function(root) {
if(!root) return root;
let sum = 0;
const dfs = (root) => {
if(!root) return null
if(!root.left && !root.right){
root.val = root.val + sum;
sum = root.val;
return root
}
dfs(root.right);
root.val = root.val + sum;
sum = root.val;
dfs(root.left)
return root
}
return dfs(root)
};
这里就是换了一种递归方式罢了,还是比较简单的~