You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将父子节点列表转换为指定的嵌套树形结构?

问题描述

现有节点关系列表:

lines = [[0,1],[0,2],[0,3],[1,4],[2,5],[2,6],[3,7],[3,8],[3,9]]

其中每个元素格式为[父节点, 子节点],根节点固定为0,节点层级关系为:

  • 0的子节点是1、2、3
  • 1的子节点是4
  • 2的子节点是5、6
  • 3的子节点是7、8、9

期望生成嵌套结构:

[0, [1, [4]], [2, [5], [6]], [3, [7], [8], [9]]]

但运行以下代码后,输出为[[0], [1, [4]], [2, [5, 6]], [3, [7, 8, 9]]],不符合预期:

lines = [[0,1],[0,2],[0,3],[1,4],[2,5],[2,6],[3,7],[3,8],[3,9]]

result = []
node_n = []
for i in lines:
    node = list()
    for j in lines:
        if i[0] == j[0]:
            node.append(j[1])
            # print(node)
    node_list = [i[0],node]    
    if node_list not in result:
        result.append(node_list)
result.sort()
del result[0][1]
print(result)
修复方案

原代码仅简单收集了每个节点的直接子节点,未递归处理子节点的后代,且结构组织逻辑有误。通过递归方式可以正确构建目标嵌套结构,具体实现如下:

lines = [[0,1],[0,2],[0,3],[1,4],[2,5],[2,6],[3,7],[3,8],[3,9]]

# 构建节点-子节点映射字典,方便快速查询
node_map = {}
for parent, child in lines:
    if parent not in node_map:
        node_map[parent] = []
    node_map[parent].append(child)

# 递归生成嵌套树形结构
def build_tree(node):
    # 无后代节点时,直接返回[节点值]
    if node not in node_map:
        return [node]
    # 初始化当前节点的结构,再逐个添加子节点的嵌套结构
    tree = [node]
    for child in node_map[node]:
        tree.append(build_tree(child))
    return tree

# 从根节点0开始构建结构
result = build_tree(0)
print(result)

运行后输出符合预期:

[0, [1, [4]], [2, [5], [6]], [3, [7], [8], [9]]]

关键逻辑说明

  • 节点映射字典:将原始列表转换为{父节点: [子节点列表]}的格式,例如{0: [1,2,3], 1: [4]},大幅提升子节点查询效率。
  • 递归构建:对每个节点,先创建包含自身的基础结构,再遍历所有子节点,递归生成子节点的完整嵌套结构并追加到当前节点结构中;无后代的节点直接返回自身的列表形式。

内容的提问来源于stack exchange,提问作者Ray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:33