叶子路径总和等于python中

时间:2016-07-10 01:12:12

标签: python tree

我在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)

1 个答案:

答案 0 :(得分:0)

简短回答:不。

更长的答案:语句currSum = currSum + node.data是唯一对currSum进行任何更改的语句,会更改该变量所引用的对象;相反,它会创建一个 new 对象并指向curium。由于此变量不同于从调用者传递的参数(即,引用相同对象的不同的变量),因此此类更改对参数没有影响。< / p>