首页 > 解决方案 > Python:列表如何在递归中工作

问题描述

我正在尝试打印二叉树的路径(从根到叶节点)。我试图使用列表作为输入来记录路径并返回它。

但是,返回值为空,通过在递归函数中打印路径,我可以看到路径正在正确生成。

情况1:

Input:
res = printPath(root, node,[]) 

Output:
res = []

我的问题是,list 如何与递归一起工作,python 如何处理它的范围?

案例二:

Input:
p_ = []

res = printPath(root, node, p_)

Output:
res != []

也 res 不等于最终路径,在递归中,你能告诉我为什么会这样。例如,路径 = [3, 5], res = []

res 不是空的,但它会有一些递归的中间值。我想,在这种情况下,列表被视为指针。

如果您能告诉我这两种情况之间的区别,那就太好了。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def printPath(self, root, node, path):
        if root:
            # print root.val, node
            if root.val == node:
                path.append(node)
                print path
                return path
            if root.left:
                path.append(root.val)
                self.printPath(root.left, node, path)
            if root.right:
                path.append(root.val)
                self.printPath(root.right, node, path)

    def lowest_main(self, root, p):
        # print root.val, p
        p_ = []
        print self.printPath(root, 5, p_)
        # print p_

标签: pythonlistpointersscope

解决方案


因为:

>>> [].append(2)
>>> []
[]
>>> l=[]
>>> l.append(2)
>>> l
[2]
>>> 

因为[]没有存储在任何地方,所以不会更新任何变量,这就是原因。

[]之后会保存在内存中append,但无法访问它。


推荐阅读