笔者提供的代码,都是基于python的语言特性实现的,简单明了为上
原始数据
child
: 子节点parent
:父节点- 如果
parent==child
,则为根节点(这里是森林的结构)
child,parent
a,b
b,c
c,c
代码
- 初始化树
- 层级遍历
- 前序遍历、后序遍历
- 获取枝干,查找节点
import json
from copy import deepcopy
from collections import defaultdict, OrderedDict
class Tree:
def __init__(self, par2chi: list, parent_key='parent', child_key='child'):
"""
有父子结构组成的数据体系,结束标志:obj[self.parent_key] == obj[self.child_key]
:param par2chi: [{self.parent_key: '', self.child_key: ''}]
"""
self.child_key = child_key
self.parent_key = parent_key
self.tree = self.init_tree(par2chi)
def __end_signal(self, parent, child):
"""
结束信号,森林的根节点的标志
"""
return parent == child
def init_tree(self, par2chi):
"""
初始化树结构,主要是利用 python 的语言特性实现的,表面上看,时间复杂度是n,空间复杂度n,n为par2chi的大小
"""
original = defaultdict(dict)
original_c = defaultdict(dict)
for row in par2chi:
if row[self.child_key] not in original_c:
original_c[row[self.child_key]] = dict()
if self.__end_signal(row[self.parent_key], row[self.child_key]):
original[row[self.parent_key]] = original_c[row[self.child_key]]
else:
original_c[row[self.parent_key]][row[self.child_key]