def build_tree(nodes, parent):
"""
从某个节点开始构建其树列表的 dict 结构
:param nodes: 被查询的节点列表 可理解为整个树结构中所有的节点列表
:param parent: 当前节点的父节点
:return:
"""
# 创建 node_list 用来记录该节点下的所有(直接和间接)节点列表
# 在不存在 merge 的情况下,删除该节点时,该列表中的节点应该被全部删除
node_list = list()
# create empty tree to fill
tree = dict()
# 递归构建
build_tree_recursive(tree, parent, nodes, node_list)
return tree, node_list
def build_tree_recursive(tree, parent, nodes, node_list):
"""
递归构建的过程
:param tree:
:param parent: 递归过程中当前的父节点
:param nodes:
:param node_list: 该节点下的所有直接和间接列表
:return:
"""
# find children
children = [n for n in nodes if n.parent == parent]
node_list.extend([c.name for c in children])
# build a subtree for each child
for child in children:
# start new subtree
tree[child.name] = {}
# call recursively to build a subtree for current node
build_tree_recursive(tree[child.name], child, nodes, node_list)
测试
if __name__ == "__main__":
# just test it
res1, res2 = build_tree(node_list, None)
print(res1)
print()
print()
print(res2)