我正在Leetcode上解决这个问题:给定二进制搜索树的根节点,返回所有节点的值之和,该值在包含范围[low,high]内。
我的问题是,当用self
实例化running_sum
(代码段1(时,为什么函数能工作,而当我跟踪函数中的running_sum
并在函数末尾使用running sum
的返回语句(代码段2(时却不能工作。
注意:我只是想了解为什么下面的代码有效,但后面的代码片段无效,而不是算法的逻辑。
这项工作:
class Solution:
def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int:
def helper(node):
if low <= node.val <= high:
self.running_sum += node.val
if node.left and low < node.val:
helper(node.left)
if node.right and high > node.val:
helper(node.right)
self.running_sum = 0
helper(root)
return self.running_sum
这不起作用:
class Solution:
def rangeSumBST(self, root: TreeNode, low: int, high: int) -> int:
def helper(node, running_sum):
if low <= node.val <= high:
running_sum += node.val
if node.left and low < node.val:
helper(node.left, running_sum)
if node.right and high > node.val:
helper(node.right, running_sum)
return running_sum
return helper(root,0)
在第一种情况下,running_sum
是helper
的全局变量,因此当
if low <= node.val <= high:
running_sum += node.val
运行时,它在全局范围内添加。
在第二个函数中,running_sum
不是全局存储的,因此要使其工作,您需要替换
if ...:
helper(..)
带有
if ...:
running_sum += helper(...)