Leetcode 669.修剪二叉搜索树
题目:669.修剪二叉搜索树 讲解:https://www.bilibili.com/video/BV17P41177ud
初始思路
代码
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};
var trimBST = function (root, low, high) {if (root == null) {return null;}// 处理头结点,让root移动到[low, high] 范围内,注意是左闭右闭while (root !== null && (root.val < low || root.val > high)) {if (root.val < low) {root = root.right;} else {root = root.left;}}let cur = root;// 此时root已经在[low, high] 范围内,处理左孩子元素小于low的情况while (cur !== null) {while (cur.left && cur.left.val < low) {cur.left = cur.left.right;}cur = cur.left;}cur = root;//判断右子树大于high的情况while (cur !== null) {while (cur.right && cur.right.val > high) {cur.right = cur.right.left;}cur = cur.right;}return root;};
感想
- 递归更好理解,学会递归写法。
Leetcode 108.将有序数组转换为二叉搜索树
初始思路
找到数组的中点,左半部分作为左子树,右半部分作为右子树,递归构建BST。
代码
var sortedArrayToBST = function (nums) {if (nums.length === 0) return nullconst mid = Math.floor(nums.length / 2)const root = new TreeNode(nums[mid])root.left = sortedArrayToBST(nums.slice(0, mid))root.right = sortedArrayToBST(nums.slice(mid + 1))return root};
感想
- JS除法会带小数。。。记得取整一下
Leetcode 538.把二叉搜索树转换为累加树
初始思路
看了第一遍题目都没看懂。。。如果平摊成数组的话就是从后开始累加。
代码
var convertBST = function (root) {let pre = 0const reverseInOrder = (cur) => {if (cur) {// 右reverseInOrder(cur.right)// 中cur.val += prepre = cur.val// 左reverseInOrder(cur.left)}}reverseInOrder(root)return root};
var convertBST = function (root) {let pre = 0;let cur = root;let stack = [];while (cur !== null || stack.length !== 0) {while (cur !== null) {stack.push(cur);cur = cur.right;}cur = stack.pop();cur.val += pre;pre = cur.val;cur = cur.left;}return root;};
感想
- 由图可以看出来,最右边的节点的值是最小的,往上开始加,最左侧的节点的值是最大的。所以递归方向是:右中左。

- 迭代用的是中序遍历模板,把处理逻辑放在遍历中。
- 写了十天二叉树,我的天哪。
- 二叉树总结篇:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E6%80%BB%E7%BB%93%E7%AF%87.html#%E6%9C%80%E5%90%8E%E6%80%BB%E7%BB%93
