Leetcode938二叉搜索树的范围和(python实现)

1.题目描述


给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。

二叉搜索树保证具有唯一的值。

示例 1:

输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32
示例 2:

输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23
 

提示:

树中的结点数量最多为 10000 个。
最终的答案保证小于 2^31。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/range-sum-of-bst
啊啊啊,这个题意呀。。我是真的没有看懂,有的人说,没看懂题意的都是刷题少的人。。。。

所以我来解释一下题意。

root=[......]我是第一次见这么写一个树的。。。根据leetcode树结构可视化结构,给出的这个序列是一个先序遍历。

给的提交代码python版的函数调用的root是根节点,不是一串序列。。。。。

这样就清晰了,可以用经典的二叉树递归了。由树的根节点开始左右子树递归遍历。

2.python解答


思路,当结点不为空时,递归遍历左右子树,如果结点的值大于等于L且小于等于R,就累加。

代码如下

class Solution(object):
    def rangeSumBST(self, root, L, R):
        """
        :type root: TreeNode
        :type L: int
        :type R: int
        :rtype: int
        """
        self.sumBST = 0
        self.scanBST(root,L,R)
        return self.sumBST
    
    def scanBST(self, root, L, R):
        if root:
            if root.val>=L and root.val<=R:
                self.sumBST += root.val
            self.scanBST(root.left,L,R)
            self.scanBST(root.right,L,R)

3.解答过程中遇到的问题


1.Python判断值是否为空

第一种是`if x is None`;

第二种是 `if not x:`;

第三种是`if not x is None`(这句这样理解更清晰`if not (x is None)`) 。

`if x is not None`是最好的写法,清晰,不会出现错误,以后坚持使用这种写法。

使用if not x这种写法的前提是:必须清楚x等于None,  False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()时对你的判断没有影响才行。

2.python与C++的引用混淆

Python不允许程序员选择采用传值还是传 引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典 或者列表)的引用,就能修改对象的原始值——相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能 直接修改原始对象——相当于通过“传值”来传递对象。(参考链接:https://www.jb51.net/article/127667.htm

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值