这个问题在这里已有答案:
在某些情况下,这是我正在研究的面试问题(取自https://leetcode.com/problems/path-sum/description/)。我现在意识到它只是从每个递归函数返回一个布尔值更清洁,但我仍然不明白为什么这不起作用:
class Solution:
def hasPathSum(self, root, sum):
result = None
self.recurse(result, root, root.val, sum)
return result
def recurse(self, result, node, sub_sum, target):
if sub_sum > target:
return
if sub_sum == target:
result = True
return
if node.left:
self.recurse(result, node.left, sub_sum+node.left.val, target)
if node.right:
self.recurse(result, node.right, sub_sum+node.right.val, target)
返回的值(无论树深度如何)为None。为什么这个值没有改变?是不是通过参考传递?
你不能从它定义的方法之外影响result
- 它只是一个局部变量,作用于你定义它的函数。正如其他人所说,这里没有传递引用。
为了达到你想要的效果,你必须让result
成为对象的属性 - 实际上将它称为self.result
。 (你可能也想在你的类的构造函数中初始化它 - 但是我不确定这里显示的两个方法应该在整个类的上下文中做什么,所以我不能确定。)