遍历二叉树的递归

时间:2019-04-01 23:54:05

标签: python python-3.x python-2.7 recursion

我正在尝试解决leetcode问题#113,即“给出一棵二叉树和一个和,找到所有根到叶的路径,其中每个路径的和等于给定的和”

我的问题是为什么下面显示的我的代码#1打印树中所有节点的值?递归堆栈如何在代码#1中工作,而不是递归堆栈如何在代码#2中工作,这是正确的解决方案?

非常感谢您对我的帮助!

#code #1
class Solution:
    def pathSum (self, root, sum):
        self.res = []
        self.dfs(root, sum, [])
        return self.res
    def dfs(self, root, sum, path):
        if not root:
            return 
        sum -= root.val
        path += [root.val]
        if not root.left and not root.right and sum == 0:
            self.res.append(path)
        self.dfs(root.left, sum, path)
        self.dfs(root.right, sum, path)
#code #2
class Solution:
    def pathSum (self, root, sum):
        self.res = []
        self.dfs (root, sum, [])
        return self.res 
    def dfs (self, root, sum, path):
        if not root:
            return 
        sum -= root.val
        if not root.left and not root.right and sum == 0:
            self.res.append(path + [root.val])
        self.dfs(root.left, sum, path+[root.val])
        self.dfs(root.right, sum, path+[root.val])

1 个答案:

答案 0 :(得分:0)

嗯,上面的评论是当之无愧的,这里有一些例子会有所帮助。例如,您谈论打印,但是这里没有打印语句,那么您如何驱动它以及如何使用它?

话虽如此,我怀疑问题会追溯到Code#1更改path的值,而Code#2却没有更改的事实。现在,如果path是一个数字,那就没关系了,因为它将按值传递。但是,您最初传入的是[](一个空列表),它是一个object。 。 。因此它通过引用传递。结果,随着代码1的进行,您将不断更改上方的节点(路径),但是在代码2中,传入的路径永远不会改变。