在树递归期间保存路径

时间:2014-03-27 14:26:01

标签: 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.children:
        copyPath.append(child.data.value)
        getPaths(child,level+1, copyPath)

首先,我试图在不复制列表的情况下简单地执行此操作,但这显然无法正常工作。但即使我复制列表,似乎只使用一个全局列表来收集所有值,而不是将它们路径收集到不同的列表中。

我很感激这个(可能)容易出问题的一些帮助。

1 个答案:

答案 0 :(得分:3)

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

for child in tree.children:
   getPaths(child, level+1, chain(path, [child.data.value]))

现在你有一个iterator可以迭代,而不依赖于复制列表,而是代表最初的路径"加上一个新的"节点。"

修改

请记住,您正在处理iterator,以便如果您希望能够迭代它并将其传递给另一个函数,您可能需要tee它(也来自itertools) 。)