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

Python嵌套列表树结构:如何推导指定节点到根的路径

实现指定节点到根节点的路径查询

核心思路

要反向获取节点到根的路径,关键先把每个节点的父节点信息存成一个"节点-父节点"对照表,之后从目标节点出发,顺着父节点一步步往上找,直到根节点即可。

具体步骤及代码

1. 生成父节点映射字典

基于你现有遍历函数改造,不用打印,而是把节点和父节点的对应关系存入字典:

def build_parent_map(node, adj, parent, parent_map):
    # 记录当前节点的父节点
    parent_map[node] = parent
    # 递归遍历子节点
    for cur in adj[node]:
        if cur != parent:
            build_parent_map(cur, adj, node, parent_map)

2. 编写路径查询函数

利用生成的父节点字典,从目标节点往上追溯到根节点(根节点1的父节点是0):

def get_path_to_root(target_node, parent_map):
    path = []
    current = target_node
    # 循环直到找到根节点的父节点标记(0)
    while current != 0:
        path.append(str(current))
        # 跳到当前节点的父节点
        current = parent_map[current]
    # 把路径列表转为指定格式的字符串
    return " -> ".join(path)

3. 完整使用示例

根据你给出的运行结果,对应的邻接表adj如下,直接代入即可测试:

# 邻接表,adj[节点]存储该节点的所有子节点
adj = {
    1: [2, 3, 4, 5],
    2: [],
    3: [10, 11],
    10: [],
    11: [14,15,16,17,18,19],
    14: [],
    15: [],
    16: [],
    17: [],
    18: [],
    19: [],
    4: [],
    5: []
}

# 构建父节点字典
parent_map = {}
build_parent_map(1, adj, 0, parent_map)

# 查询节点17到根的路径
print(get_path_to_root(17, parent_map))  # 输出:17 -> 11 -> 3 -> 1

代码说明

  • build_parent_map:递归遍历整棵树,把每个节点的父节点信息存入字典,比如parent_map[17] = 11、parent_map[11] = 3,相当于给每个节点记好"上级是谁"。
  • get_path_to_root:从目标节点开始,每次把当前节点加入路径,然后跳到它的父节点,直到碰到根节点的标记(0),最后把路径拼接成要求的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:30:49