Python 在树递归期间保存路径

Python 在树递归期间保存路径,python,list,recursion,Python,List,Recursion,我遇到了一个有点恼人的问题:我有一棵树,想递归地遍历它。在递归过程中,我想保存当前路径,因为在节点中只保存当前值。我使用以下代码: def getPaths(tree, level, path): copyPath = list(path) if level > 1: if not tree.children: '''do some non important stuff''' for child in tree.childre

我遇到了一个有点恼人的问题:我有一棵树,想递归地遍历它。在递归过程中,我想保存当前路径,因为在节点中只保存当前值。我使用以下代码:

def getPaths(tree, level, path):
    copyPath = list(path)
    if level > 1:
        if not tree.children:
           '''do some non important stuff'''
    for child in tree.children:
        copyPath.append(child.data.value)
        getPaths(child,level+1, copyPath)
首先,我试图不复制列表就简单地完成它,但这显然不起作用。但即使在复制列表时,似乎也只使用一个全局列表来收集所有值,而不是按路径将它们收集到不同的列表中


对于这个(可能)简单的问题,我将非常感谢您的帮助。

如果您想以不变的方式进行此操作,请查看
itertools
方法:

for child in tree.children:
   getPaths(child, level+1, chain(path, [child.data.value]))
现在您有了一个
迭代器
,您可以对其进行迭代,它不依赖于复制列表,而是表示初始“路径”和新“节点”的内容

编辑


请记住,您正在处理一个
迭代器
,因此,如果您希望能够对它进行迭代,然后将其传递给另一个函数,您可能希望
tee
它(也来自itertools)。

出于性能原因,它肯定会继续传递相同的列表(您不会喜欢另一种方式!)但您可以使用不同的数据结构,也可以使用不同的数据结构。如果你想的话,只需要保留一个列表。谢谢你的快速回答。为我工作:)。祝你今天愉快