在java中,我有一个树状结构的数据,除了第一层只有一个节点,其它每层的节点数量都不确定。请帮我实现一个方法,入参是一个List,List中放了树上的节点,出参是每个节点挂在其父节点下,且父节点如果还有父节点,那么父节点也需要挂在其父节点下,直到没有父节点。
时间: 2024-03-17 09:40:18 浏览: 104
关于java树型结构
好的,根据你的需求,我可以提供下面的Java代码实现:
```java
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);
}
}
```
你可以将你的节点放入一个列表中,然后调用 `TreeBuilder.buildTree(nodes)` 方法,即可得到挂载好的树结构。
其中 `Node` 类表示树上的一个节点,包含节点的 `id` 和 `parentId`,以及子节点列表 `children`。`TreeBuilder` 类为构建树的工具类,将节点放入map中,然后遍历节点,将每个节点挂在其父节点下即可。
希望这个实现能够帮到你!
阅读全文