如何仅通过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
相关产品推荐
相关产品推荐

