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

基于层级编码树的单叶子移除后剩余树生成方案咨询

实现思路

1. 将编码转换为内存树结构

直接操作字符串编码容易触发边界错误,先转成可操作的树结构是核心解决方案:

  • 用栈跟踪当前层级的节点,初始时将根节点(编码第一个元素)压入栈。
  • 遍历编码的每个元素:
    • 若为普通节点(非-1):创建节点,将其加入栈顶节点的子节点列表,再压入栈。
    • 若为-1:弹出栈顶节点,回到父节点层级。

比如第一个示例A ➜ B ➜ C ➜ -1 ➜ D转换后:

  • A的子节点是B;B的子节点是C、D;C和D无后续子节点(即叶子节点)。

2. 定位所有叶子节点

叶子节点的判定标准是没有子节点,遍历树结构即可快速筛选出所有目标节点。

3. 移除叶子后生成新编码

针对每个叶子节点执行以下操作:

  • 复制原树(避免修改原始数据),从该叶子的父节点子节点列表中删除它。
  • 对新树执行带回溯标记的前序遍历:
    • 遍历到节点时,将节点名加入结果列表。
    • 遍历完当前节点的所有子节点后,若当前节点不是根节点,就向结果中添加-1(表示回溯到父节点)。
    • 注意:即使父节点删除叶子后变为新的叶子,回溯逻辑仍需正常执行;若父节点还有其他子节点,回溯标记不可省略。

比如第二个示例移除C后的遍历流程:

  1. 遍历A,加入列表 → [A]
  2. 遍历A的第一个子节点B,加入列表 → [A, B]
  3. B无后续子节点,添加-1回溯 → [A, B, -1]
  4. 回到A,遍历第二个子节点D,加入列表 → [A, B, -1, D]
  5. D无后续子节点,且是根节点的最后一个子节点,无需添加-1
    最终将列表用➜连接,得到A ➜ B ➜ -1 ➜ D,符合预期。

关于工具库

无需依赖第三方工具库,用基础语言特性即可实现。以Python为例,可简单定义节点类:

class TreeNode:
    def __init__(self, name):
        self.name = name
        self.children = []
        self.parent = None

或直接用字典模拟节点({"name": "X", "children": [], "parent": ...}),逻辑完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:05:21