在树递归期间保存路径
问题描述:
我陷入了一个令人讨厌的问题:我有一棵树并且想递归遍历它。在递归期间,我想保存当前路径,因为在节点中只保存当前值。我用下面的代码是:在树递归期间保存路径
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
和chain
方法:
for child in tree.children:
getPaths(child, level+1, chain(path, [child.data.value]))
现在你有一个iterator
,你可以遍历这是依赖不是复制列表而是代表最初“路径”加上新的“节点”的东西。
编辑:
只要记住,你是在处理一个iterator
因此,如果你希望能够在其上进行迭代,然后传递给另一个函数,您可能希望tee
它(也itertools)。
+0
谢谢你的快速回答。适用于我:)。祝你今天愉快 –
由于性能方面的原因(你不会喜欢另一种方式!),但是你可以使用不同的数据结构,或者使用不同的数据结构。如果你想,只需保留一份清单。 –