import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class TreeBuilder { public static List<Node> buildTree(List<Node> nodes) { Map<Integer, Node> nodeMap = new HashMap<>(); List<Node> rootNodes = new ArrayList<>(); // 将节点放入map中,方便查找 for (Node node : nodes) { nodeMap.put(node.getId(), node); } // 遍历节点,将每个节点挂在其父节点下 for (Node node : nodes) { Node parent = nodeMap.get(node.getParentId()); if (parent != null) { parent.addChild(node); } else { rootNodes.add(node); } } return rootNodes; } } class Node { private int id; private int parentId; private List<Node> children = new ArrayList<>(); public Node(int id, int parentId) { this.id = id; this.parentId = parentId; } public int getId() { return id; } public int getParentId() { return parentId; } public List<Node> getChildren() { return children; } public void addChild(Node child) { children.add(child); } } 这一段代码没有把节点按照父子节点的关系层层组装返回给我
时间: 2024-02-14 09:13:44 浏览: 112
java.util.ConcurrentModificationException 解决方法
5星 · 资源好评率100%
这段代码实现了将一个列表中的节点按照父子关系组装成一棵树,并返回根节点列表。如果你想要得到一棵组装好的树,你需要调用 `TreeBuilder.buildTree()` 方法。例如:
```
List<Node> nodes = new ArrayList<>();
// 添加节点到 nodes 列表中
List<Node> rootNodes = TreeBuilder.buildTree(nodes);
```
其中,`rootNodes` 就是组装好的根节点列表。你可以遍历 `rootNodes` 中的每一个节点,通过 `Node.getChildren()` 方法获取其子节点列表,以此类推,就可以遍历整棵树了。
阅读全文