力扣之递归——二叉搜索树的范围和

二叉搜索树的范围和这道题的我一开始的思路就是中序遍历取出所有数据,然后再挑选,但是这样的效率很低,而且代码量相对较多既然题型是递归,当然需要使用到递归,基本思想是分为三个步骤:1.如果root.val<L,那么符合条件的范围的值就是在root的右子树2.如果root.val>R,那么符合条件的范围的值就是在root的左子树3.如果L<=root.val<=R,那么符合条件的值就是在root的左子树和右子树根据这个思路,很容易想到该如何进行递归,下面上代码class S
摘要由CSDN通过智能技术生成

二叉搜索树的范围和

在这里插入图片描述
这道题的我一开始的思路就是中序遍历取出所有数据,然后再挑选,但是这样的效率很低,而且代码量相对较多
既然题型是递归,当然需要使用到递归,基本思想是分为三个步骤:
1.如果root.val<L,那么符合条件的范围的值就是在root的右子树
2.如果root.val>R,那么符合条件的范围的值就是在root的左子树
3.如果L<=root.val<=R,那么符合条件的值就是在root的左子树和右子树

根据这个思路,很容易想到该如何进行递归,下面上代码

class Solution {

    int sum=0;
    public int rangeSumBST(TreeNode root, int L, int R) {
        traversal(root,L,R);
        return sum;

        

    }

    public void traversal(TreeNode root,int L,int R){
        if(root==null){
            return;
        }

        //情况一
        if(root.val<L){
            traversal(root.right,L,R);
        }

        //情况二
        if(root.val>R){
            traversal(root.left,L,R);
        }

        //情况三
        if(root.val>=L&&root.val<=R){
            sum+=root.val;
            traversal(root.left,L,R);
            traversal(root.right,L,R);
        }

    }
}

这种思路的好处就是利用二叉搜索树的特性,不需要遍历所有节点,虽然时间复杂度也是O(n),但是O(n)只是对时间或者空间上限的描述,不是那么确切,真正运行起来,尤其在数据量大的时候,就会节省大量的时间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值