我在python中为这个问题编写了以下代码,似乎有效。
据我所知,在python中,一切都绑定到一个对象。所以,在这种情况下,当我们返回递归堆栈时,我的currSum
不会反映更新的值(我的意思是说我们在完成左递归后处理正确的子进程)?
class Node:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
def RootToLeafSum(node,currSum, targetSum):
if node == None:
return False
currSum = currSum + node.data
if node.left == None and node.right == None: #leafNode
return currSum == targetSum
LS = RootToLeafSum(node.left,currSum,targetSum)
RS = RootToLeafSum(node.right,currSum,targetSum)
return LS or RS
n1 = Node(1)
n2 = Node(2)
n3 = Node(3)
n4 = Node(4)
n5 = Node(5)
n1.left = n2
n1.right = n3
n2.left = n4
n2.right = n5
print RootToLeafSum(n1,0,4)
答案 0 :(得分:0)
简短回答:不。
更长的答案:语句currSum = currSum + node.data
是唯一对currSum
进行任何更改的语句,不会更改该变量所引用的对象;相反,它会创建一个 new 对象并指向curium
。由于此变量不同于从调用者传递的参数(即,引用相同对象的不同的变量),因此此类更改对参数没有影响。< / p>