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

题目链接:669. 修剪二叉搜索树 

文章讲解:代码随想录

视频讲解:你修剪的方式不对,我来给你纠正一下!| LeetCode:669. 修剪二叉搜索树_哔哩哔哩_bilibili

 看完代码随想录之后的想法:

如果节点为空的话,我们返回null;

如果节点的值小于low的话,我们需要删除此节点和此节点的左子树,但是此节点的右子树可能仍然存在小于low的值,因此我们需要递归一下此节点的右子树;

如果节点的值大于high的话,我们需要删除此节点和此节点右子树,但是此节点的左子树仍然可能

存在大于high的值,因此我们需要递归一下此节点的左子树;

我们每次递归返回的值需要有变量接着,递归返回的节点需要我们调用递归之前的节点来接着,这样就可以让节点的左右节点相连了;

class Solution { 
    public TreeNode trimBST(TreeNode root, int low, int high) {
        if(root == null) 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.将有序数组转换为二叉搜索树  

文章讲解:代码随想录

视频讲解:构造平衡二叉搜索树!| LeetCode:108.将有序数组转换为二叉搜索树_哔哩哔哩_bilibili

看完代码随想录之后的想法:

构造二叉树我们使用中序遍历;

终止条件left > right;

1:先构造根节点;

2:递归构造左子树;我们需要接受返回的左子树的根节点;

3:递归构造右子树;我们需要接受返回的右子树的根节点;

class Solution {
    TreeNode travesal(int[] nums, int left, int right) {
        if(left > right) return null;
        int mid = (left + right) / 2;
        TreeNode node = new TreeNode(nums[mid]);
        node.left = travesal(nums, left, mid - 1);
        node.right = travesal(nums, mid + 1, right);
        return node;
    }
    public TreeNode sortedArrayToBST(int[] nums) {
        return travesal(nums, 0, nums.length - 1);
    }
}

题目链接:538.把二叉搜索树转换为累加树  

代码随想录

看完代码随想录之后的想法:

class Solution {
    int count = 0;
    void tarversal(TreeNode root) {
        if(root == null) return ;
        tarversal(root.right);
        count += root.val;
        root.val = count;
        tarversal(root.left);
    }
    public TreeNode convertBST(TreeNode root) {
        tarversal(root);
        return root;
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值