在树递归期间保存路径

问题描述:

我陷入了一个令人讨厌的问题:我有一棵树并且想递归遍历它。在递归期间,我想保存当前路径,因为在节点中只保存当前值。我用下面的代码是:在树递归期间保存路径

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) 

首先我想简单地做没有复制列表,但是这显然不能工作。但即使我复制列表,似乎只使用一个全局列表来收集所有的值,而不是将它们按顺序收集到不同的列表中。

我希望对这个(可能)简单的问题有所帮助。

+0

由于性能方面的原因(你不会喜欢另一种方式!),但是你可以使用不同的数据结构,或者使用不同的数据结构。如果你想,只需保留一份清单。 –

如果你想这样做在一个不变的风格,放眼itertoolschain方法:

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

现在你有一个iterator,你可以遍历这是依赖不是复制列表而是代表最初“路径”加上新的“节点”的东西。

编辑

只要记住,你是在处理一个iterator因此,如果你希望能够在其上进行迭代,然后传递给另一个函数,您可能希望tee它(也itertools)。

+0

谢谢你的快速回答。适用于我:)。祝你今天愉快 –