Java 返回父子关联表的树形结构
时间: 2023-08-29 11:08:41 浏览: 88
要返回父子关联表的树形结构,你可以使用递归算法来实现。以下是一个示例的 Java 代码:
```java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class TreeStructure {
public static class Node {
private int id;
private String name;
private int parentId;
private List<Node> children;
public Node(int id, String name, int parentId) {
this.id = id;
this.name = name;
this.parentId = parentId;
this.children = new ArrayList<>();
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getParentId() {
return parentId;
}
public List<Node> getChildren() {
return children;
}
public void addChild(Node child) {
children.add(child);
}
}
public static List<Node> buildTree(List<Node> nodes) {
Map<Integer, Node> nodeMap = new HashMap<>();
// 将节点放入哈希表中,以便根据 id 查找节点
for (Node node : nodes) {
nodeMap.put(node.getId(), node);
}
List<Node> tree = new ArrayList<>();
// 根据 parentId 构建树结构
for (Node node : nodes) {
int parentId = node.getParentId();
if (parentId == 0) {
// 根节点
tree.add(node);
} else {
Node parent = nodeMap.get(parentId);
if (parent != null) {
parent.addChild(node);
}
}
}
return tree;
}
public static void main(String[] args) {
// 示例数据
List<Node> nodes = new ArrayList<>();
nodes.add(new Node(1, "A", 0));
nodes.add(new Node(2, "B", 1));
nodes.add(new Node(3, "C", 1));
nodes.add(new Node(4, "D", 2));
nodes.add(new Node(5, "E", 4));
List<Node> tree = buildTree(nodes);
// 遍历树结构
for (Node node : tree) {
printTree(node, 0);
}
}
private static void printTree(Node node, int level) {
StringBuilder indent = new StringBuilder();
for (int i = 0; i < level; i++) {
indent.append(" ");
}
System.out.println(indent.toString() + node.getName());
for (Node child : node.getChildren()) {
printTree(child, level + 1);
}
}
}
```
这段代码中,我们定义了一个 `Node` 类来表示树的节点,包含 id、name、parentId 和 children 属性。然后,我们使用 `buildTree` 方法来构建树结构,该方法接受一个节点列表作为输入,并返回树的根节点列表。最后,我们通过递归遍历树结构,并打印出每个节点的名称来验证结果。
你可以根据实际需求修改代码,并根据需要进行扩展。希望能对你有所帮助!
阅读全文