基于层级编码树的单叶子移除后剩余树生成方案咨询
实现思路
1. 将编码转换为内存树结构
直接操作字符串编码容易触发边界错误,先转成可操作的树结构是核心解决方案:
- 用栈跟踪当前层级的节点,初始时将根节点(编码第一个元素)压入栈。
- 遍历编码的每个元素:
- 若为普通节点(非
-1):创建节点,将其加入栈顶节点的子节点列表,再压入栈。 - 若为
-1:弹出栈顶节点,回到父节点层级。
- 若为普通节点(非
比如第一个示例A ➜ B ➜ C ➜ -1 ➜ D转换后:
- A的子节点是B;B的子节点是C、D;C和D无后续子节点(即叶子节点)。
2. 定位所有叶子节点
叶子节点的判定标准是没有子节点,遍历树结构即可快速筛选出所有目标节点。
3. 移除叶子后生成新编码
针对每个叶子节点执行以下操作:
- 复制原树(避免修改原始数据),从该叶子的父节点子节点列表中删除它。
- 对新树执行带回溯标记的前序遍历:
- 遍历到节点时,将节点名加入结果列表。
- 遍历完当前节点的所有子节点后,若当前节点不是根节点,就向结果中添加
-1(表示回溯到父节点)。 - 注意:即使父节点删除叶子后变为新的叶子,回溯逻辑仍需正常执行;若父节点还有其他子节点,回溯标记不可省略。
比如第二个示例移除C后的遍历流程:
- 遍历A,加入列表 →
[A] - 遍历A的第一个子节点B,加入列表 →
[A, B] - B无后续子节点,添加
-1回溯 →[A, B, -1] - 回到A,遍历第二个子节点D,加入列表 →
[A, B, -1, D] - 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
相关产品推荐
相关产品推荐

