【发布时间】:2020-07-28 00:56:12
【问题描述】:
这是我的一棵树。我想从树中的任何节点开始计算有多少内部节点(非叶节点)。
我现在拥有的函数只能计算 A 以下的所有值,即 10。但我只想要终端节点之前的那些。
- 例如。对于 A,应该是 4 (B, C, E, H)
- 例如。对于 E,它应该是 1 (H)
如何修改我的函数来做到这一点?请注意,我的数据非常大,因此递归函数会导致堆栈溢出。
name employee
0 A B
1 A C
2 B D
3 C E
4 C F
5 E H
6 E I
7 H T
8 H U
9 H V
#collapse to dictionary
dict_a = {k: g["employee"].tolist() for k,g in em.groupby("name")}
dict_a
{'A': ['B', 'C'],
'B': ['D'],
'C': ['E', 'F'],
'E': ['H', 'I'],
'H': ['T', 'U', 'V']}
# recursive function to count lengths:
def total(k,connections):
if k not in connections:
return 0
# number of direct connections plus their connections:
return len(connections[k]) + sum(total(child_k, connections) for child_k in connections[k])
【问题讨论】:
标签: python dictionary tree