实现任意树python

时间:2017-01-07 01:56:32

标签: python python-3.x tree

似乎没有类似的话题存在。

我需要从整数行构建一个树以供将来处理。该行包含从-1到-1的整数 - 节点的父节点。如果它们中的第一个(0≤≤ - 1)是-1,则node是根,否则它是-th节点的父节点的从0开始的索引。 例如

the input line of integers: 4 -1 4 1 1
then                    ->  0  1 2 3 4  
then  -> 1 is the root, 3 and 4 are children of node 1, 0 and 2 are children of node 4.

我应该可以完成剩余的工作,但不太清楚构建这棵树的处理过程。

1 个答案:

答案 0 :(得分:2)

您可以使用list,其中值为list的子项代表树。这将使树的构造变得微不足道,因为对于每个节点,您只需将当前索引附加到父子节点。以下是使用defaultdict并将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

输出:

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

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

System.Runtime.InteropServices.DllImportAttribute