list集合 [{"id": 1 ,"parentId" = 0}]; list集合2 [{"id": 2 ,"parentId" = 1,{"id": 3 ,"parentId" = 1}]; list集合3 [{"id": 11 ,"parentId" = 3},{"id": 12 ,"parentId" = 3},{"id": 121 ,"parentId" = 12},{"id": 14 ,"parentId" = 1}} java 二叉树
时间: 2023-07-06 17:37:53 浏览: 180
将这些数据转换成一棵树的数据结构,可以按照以下步骤实现:
1. 创建一个节点类,包含 id 和一个 List<Node> 的子节点列表。
2. 根据 list 集合构建第一层节点列表,即 parentId 为 0 的节点。
3. 遍历第一层节点列表,对于每个节点,遍历 list 集合2,将 parentId 与该节点的 id 相等的节点添加为该节点的子节点。
4. 遍历每个节点的子节点列表,对于每个子节点,遍历 list 集合3,将 parentId 与该子节点的 id 相等的节点添加为该子节点的子节点。
5. 完成树的构建,可以进行二叉树的遍历等操作。
以下是 Java 代码示例:
```java
public class Node {
private int id;
private List<Node> children;
public Node(int id) {
this.id = id;
this.children = new ArrayList<>();
}
public int getId() {
return id;
}
public List<Node> getChildren() {
return children;
}
public void addChild(Node child) {
children.add(child);
}
}
public class TreeBuilder {
public static Node buildTree(List<Map<String, Integer>> list1, List<Map<String, Integer>> list2, List<Map<String, Integer>> list3) {
Map<Integer, Node> nodes = new HashMap<>();
// 构建第一层节点
for (Map<String, Integer> map : list1) {
int id = map.get("id");
nodes.put(id, new Node(id));
}
// 构建第二层节点
for (Node node : nodes.values()) {
int id = node.getId();
for (Map<String, Integer> map : list2) {
int parentId = map.get("parentId");
if (parentId == id) {
int childId = map.get("id");
Node childNode = nodes.get(childId);
if (childNode == null) {
childNode = new Node(childId);
nodes.put(childId, childNode);
}
node.addChild(childNode);
}
}
}
// 构建第三层节点
for (Node node : nodes.values()) {
for (Node childNode : node.getChildren()) {
int id = childNode.getId();
for (Map<String, Integer> map : list3) {
int parentId = map.get("parentId");
if (parentId == id) {
int childId = map.get("id");
Node grandchildNode = nodes.get(childId);
if (grandchildNode == null) {
grandchildNode = new Node(childId);
nodes.put(childId, grandchildNode);
}
childNode.addChild(grandchildNode);
}
}
}
}
// 返回根节点
return nodes.get(1);
}
}
```
阅读全文