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

如何仅通过getChildren()方法实现树的后序遍历?

实现基于getChildren()的后序遍历

你当前的代码实现的是前序遍历(先添加当前节点,再递归处理子节点),要改成后序遍历(先处理所有子节点,最后添加当前节点),只需要调整节点添加的顺序:

修改后的代码如下:

Set<Node> postOrderedNodes = traverseSubAssembly(rootNode);

private static Set<Node> traverseSubAssembly(Node node) {
    Set<Node> nodes = new LinkedHashSet<>();

    // 先递归遍历所有子节点,收集子节点的后序结果
    for (Node child : node.getChildren()) {
        nodes.addAll(traverseSubAssembly(child));
    }

    // 所有子节点处理完后,再添加当前节点
    nodes.add(node);

    return nodes;
}

关键说明:

  • 后序遍历的核心逻辑是先子后根:先递归处理当前节点的所有子节点,确保子节点的后序集合都被收集完成后,再将当前节点加入结果集合。
  • 使用LinkedHashSet可以保证遍历结果的顺序和实际遍历的顺序一致,普通HashSet会打乱元素顺序。
  • 如果getChildren()返回的子节点列表顺序是你期望的遍历顺序(比如从左到右),那么最终的集合就会符合你需要的特定后序遍历顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:42:31