我需要从整数行构建一个树以供将来处理。该行包含从-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.
我应该可以完成剩余的工作,但不太清楚构建这棵树的处理过程。
答案 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