【算法第十九天8.3】669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树

链接力扣669. 修剪二叉搜索树

思路

class Solution {
    public TreeNode trimBST(TreeNode root, int low, int high) {
        // 如果遇到不合适的,不能直接将其砍掉
        // 如果是左子树根节点小了:则要考虑左子树的右孩子会不会在范围之内
        // 如果是右子树根节点大了:则要考虑右子树的左孩子会不会在范围之内
        if(root == null) return root;
        if(root.val < low){
            TreeNode right = trimBST(root.right,low,high);
            return right;
        }
        if(root.val > high){
            TreeNode left = trimBST(root.left,low,high);
            return left;
        }
        // 节点的左右子树接住上面返回的树
        root.left = trimBST(root.left,low,high);
        root.right = trimBST(root.right,low,high);
        return root;
    }
}

链接力扣108.将有序数组转换为二叉搜索树

思路

class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return BST(nums,0,nums.length - 1);
    }
    public TreeNode BST(int[] nums,int startIndex,int endIndex){
        // 如果是左闭右开:则左右索引可能会相等,但相等了就越界了
        // 没有等号的情况下,则不是左闭右开:则可以相等,这样可以将这个节点包含进来
        if(startIndex > endIndex) return null;
        int mid = (startIndex + endIndex) / 2;
        TreeNode root = new TreeNode(nums[mid]);
        root.left = BST(nums,startIndex,mid-1);
        root.right = BST(nums,mid+1,endIndex);
        return root;
    }
}

链接力扣538.把二叉搜索树转换为累加树

思路

class Solution {
    int pre = 0;
    public TreeNode convertBST(TreeNode root) {
        if(root == null) return root;
        // 右、中、左的顺序
        convertBST(root.right);
        root.val += pre;
        pre = root.val;
        convertBST(root.left);
        return root;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值