在Python中遍历树的最有效方法是什么?

时间:2011-02-13 21:26:49

标签: python tree traversal

假设我有一个包含以下字段的对象列表

这定义了一个树结构,类似于目录树。

我想以预购方式遍历列表。什么是最有效的方式?

通常情况下,在其他(更多命令性)语言中,我会迭代这些值,找到没有父项的值,然后为每一个,再次迭代其父项是我正在查看的那个对象,等等,但是在Python中有更聪明的方法吗?

1 个答案:

答案 0 :(得分:7)

我首先会创建一个更合适的数据结构 - 捕获从父级到其子级的链接:

children = {}
for obj in tree:
    children.setdefault(obj.parent, []).append(obj)

def preorder(root, children):
    yield root.value
    for child in children.get(root, []):
        for value in preorder(child, children):
            yield value

for root in children[None]:
    for value in preorder(root, children):
        print value

你也可以在这里使用collections.defaultdict