在python中实现任意树 似乎不存在类似的话题。

在python中实现任意树 似乎不存在类似的话题。,python,python-3.x,tree,Python,Python 3.x,Tree,我需要从一行整数构建一棵树,以备将来处理。这一行包含您可以使用dict其中的值将是子项列表来表示树。这将使树的构造变得微不足道,因为对于每个节点,您只需将当前索引附加到父子节点即可。下面是一个使用withlist作为默认工厂的示例: from collections import defaultdict s = '4 -1 4 1 1' tree = defaultdict(list) for node, parent in enumerate(int(x) for x in s.split

我需要从一行整数构建一棵树,以备将来处理。这一行包含您可以使用
dict
其中的值将是
子项列表
来表示树。这将使树的构造变得微不足道,因为对于每个节点,您只需将当前索引附加到父子节点即可。下面是一个使用with
list
作为默认工厂的示例:

from collections import defaultdict

s = '4 -1 4 1 1'

tree = defaultdict(list)
for node, parent in enumerate(int(x) for x in s.split()):
    tree[parent].append(node)

# Remove "parent" of the root node
root = tree.pop(-1)[0]

def print_tree(root, tree, prefix=''):
    print(prefix + str(root))
    for child in tree[root]:
        print_tree(child, tree, prefix + '  ')

print_tree(root, tree)
输出:

1
  3
  4
    0
    2
更新:下面是计算树中节点数的树遍历的另一个示例。对于访问的每个节点,它返回1+子节点的总和:

def count_nodes(root, tree):
    return 1 + sum(count_nodes(child, tree) for child in tree[root])