函数方法构建结构树
# 构建结构树
def node_tree(res_datas:list):
"""
res_datas: [
{"id": 1, "uuid": "sdghioeof943309ruad", "is_root": 1, "parent_uuid ": None, "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
{"id": 2, "uuid": "23a76rui2e3y6er1225", "is_root": 0, "parent_uuid ": "sdghioeof943309ruad", "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
{"id": 3, "uuid": "5gf34dk52j6gfs56trh", "is_root": 0, "parent_uuid ": "23a76rui2e3y6er1225", "data": "数据内容","root_uuid": "sdghioeof943309ruad"},
{"id": 4, "uuid": "sf432k53fd4n2dfw9a7", "is_root": 0, "parent_uuid ": None, "data": "数据内容","root_uuid": "sf432k53fd4n2dfw9a7"}
]
必要参数:
# uuid 是每一条数据的唯一值
# is_root 是判断是否是根节点数据
# parent_uuid 作为父子级的关联关系, 根节点为None
"""
node_map = {} # 字典映射
result_data = list() # 结构树的结果
# 第一遍:创建所有评论节点
for node_data in res_datas:
node_data['children'] = list()
node_map[node_data['uuid']] = node_data
# 第二遍:建立父子关系
for node_data in res_datas:
current_node = node_map[node_data['uuid']]
if current_node['is_root'] == 1: # 主节点,
result_data.append(current_node)
else: # 子节点
if current_node['parent_uuid'] in node_map:
parent_node = node_map[current_node['parent_uuid']]
parent_node['children'].append(current_node)
return result_data
已知任意一个子节点,查找出其最初的根主节点
def find_root_node(node_map, current_node):
"""
从当前节点开始向上查找,直到找到根节点(parent_id=0的最初的节点)
参数:
node_map: 字典,包含所有节点,键为节点ID,值为节点数据
current_node: 当前节点
返回:
根节点
"""
while True:
parent_id = current_node['parent_id']
if parent_id == 0: # 主节点
return current_node # 找到根节点
# 获取父节点并继续向上查找
current_node = node_map[parent_id]