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

基于子父元组列表遍历树收集指定节点后代,求该问题的标准名称

相关专业术语说明

你描述的场景涉及的标准专业术语如下:

  • 你使用的(child, parent)元组构成的列表,是树/图的标准存储结构之一,标准命名为边列表(Edge List),针对树结构的场景也常称为父子边集。
  • 你要实现的「收集指定节点所有后代」的操作,标准命名为后代查询(Descendant Query),是树结构的基础查询操作之一。
  • 针对边列表存储的树,实现后代查询的通用方案是从目标节点出发,做广度优先搜索(BFS) 或 深度优先搜索(DFS) 遍历,收集所有可达的子节点即可,这两种是图/树遍历的标准算法。
  • 如果需要高频执行后代查询,业界常见的优化方案是对树做预编码,常用的有两类:
    • 嵌套集模型(Nested Set Model,也叫左右值编码模型)
    • 路径枚举模型(Path Enumeration,也叫物化路径模型)
      这两种方案可以把后代查询的复杂度从遍历的O(n)降低到接近O(k)(k为后代节点数量),适合树结构变更频率低、查询需求多的场景。

示例实现(基于BFS)

针对你给出的示例,用Python实现的BFS版本后代查询代码如下:

in_list = [(2,1),(3,2),(4,3),(6,5),(7,4),(8,4)]
# 先把边列表转换为「父节点-子节点列表」的邻接映射
parent_to_children = {}
for child, parent in in_list:
    parent_to_children.setdefault(parent, []).append(child)

def get_descendants(target_node, adj_map):
    descendants = []
    # 初始化队列,放入目标节点的直接子节点
    queue = adj_map.get(target_node, [])
    while queue:
        current = queue.pop(0)
        descendants.append(current)
        # 把当前节点的子节点加入队列继续遍历
        queue.extend(adj_map.get(current, []))
    return descendants

print(get_descendants(2, parent_to_children)) # 输出 [3, 4, 7, 8]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:45:07