代码随想录算法训练营day23| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

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
    };

总结

二叉树章节 正式结束,进入回溯章节 ,继续加油!!!坚持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值