为什么这个递归函数只在实例化类中的变量时起作用



我正在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_sumhelper的全局变量,因此当

if low <= node.val <= high:
running_sum += node.val

运行时,它在全局范围内添加。

在第二个函数中,running_sum不是全局存储的,因此要使其工作,您需要替换

if ...:
helper(..)

带有

if ...:
running_sum += helper(...)

最新更新