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

如何移除元组列表表示的树结构中的直链中间节点

树结构无分叉直链压缩方法

问题说明

我们采用(父节点, 子节点)格式的元组列表表示树结构,示例输入如下:
[(0,1), (0,2), (0,3), (1,4), (1,5), (2,6), (6,7), (7,8)]
从元组列表可以还原出完整树结构:

  • 节点0共有3个子节点,分别是1、2、3
  • 节点1共有2个子节点,分别是4、5
  • 节点2仅1个子节点6,节点6仅1个子节点7,节点7仅1个子节点8

其中路径0 -> 2 -> 6 -> 7 -> 8是一条全程没有分叉的直链,按照处理规则,这类直链上的所有中间节点(即2、6、7)都要移除,直接让直链最顶端的分叉节点和最末端的节点建立连接。
通用处理规则:只要两个节点之间的路径上,所有中间节点都只有1个子节点(即路径上不存在分叉),就跳过全部中间节点,直接连接路径两端的节点。比如节点1和它的子节点之间如果夹了若干个只有单个子节点的中间节点,也需要跳过这些中间节点,直接建立上层节点和末端子节点的连接。

预期输出

上述示例输入经过处理后,最终输出的边列表为:
[(0,1), (0,8), (0,3), (1,4), (1,5)]

实现逻辑参考

  • 首先遍历所有原始边,构建「节点-对应子节点列表」的映射表,方便快速查询任意节点的子节点数量
  • 逐一遍历每条原始边,从边对应的子节点开始向下追溯:只要当前追溯到的节点有且仅有1个子节点,就继续向下遍历,直到走到叶子节点(没有子节点),或是遇到拥有多个子节点的分叉点时停止
  • 将原始边的父节点和追溯到的末端节点组合为新边,对所有新边去重后,就是压缩完成的最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:30:16