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

● 669. 修剪二叉搜索树

文字
视频
题目

1.思路

方法一:递归法
修剪的操作并不是在终止条件上进行的
如果root(当前节点)的元素小于low的数值,那么应该递归右子树,并返回右子树符合条件的头结点
如果root(当前节点)的元素大于high的,那么应该递归左子树,并返回左子树符合条件的头结点。
方法二:迭代法
没看

2.代码实现

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);
        else 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.将有序数组转换为二叉搜索树

文字
视频
题目

1.思路

方法一: 递归
本质就是寻找分割点,分割点作为当前节点,然后递归左区间和右区间
方法二:迭代
三个队列模拟
没看

2.代码实现

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

● 538.把二叉搜索树转换为累加树

文字
视频
题目

1.思路

方法一:递归
从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了。
本题依然需要一个pre指针记录当前遍历节点cur的前一个节点,这样才方便做累加。
方法二:迭代
有点难 没看

2.代码实现

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

● 模板

文字
视频
题目

1.思路

2.代码实现


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值