import java.util.*;
// 定义树节点类
class TreeNode {
int id;
int pid;
String name;
List children;
public TreeNode(int id, int pid, String name) {
this.id = id;
this.pid = pid;
this.name = name;
this.children = new ArrayList<>();
}
}
public class TreeNodeConverter {
public static List convertToTree(List nodes) {
// 存储节点映射
Map<Integer, TreeNode> nodeMap = new HashMap<>();
// 存储根节点
List rootNodes = new ArrayList<>();
// 首先将所有节点放入映射中
for (TreeNode node : nodes) {
nodeMap.put(node.id, node);
}
// 构建树结构
for (TreeNode node : nodes) {
int pid = node.pid;
if (pid == 0) {
// 如果父节点 ID 为 0,说明是根节点
rootNodes.add(node);
} else {
// 找到父节点
TreeNode parent = nodeMap.get(pid);
if (parent != null) {
parent.children.add(node);
}
}
}
return rootNodes;
}
public static void main(String[] args) {
List<TreeNode> nodes = new ArrayList<>();
nodes.add(new TreeNode(1, 0, "根节点"));
nodes.add(new TreeNode(2, 1, "子节点1"));
nodes.add(new TreeNode(3, 1, "子节点2"));
nodes.add(new TreeNode(4, 2, "孙节点1"));
nodes.add(new TreeNode(5, 2, "孙节点2"));
nodes.add(new TreeNode(6, 3, "孙节点3"));
nodes.add(new TreeNode(7, 3, "孙节点4"));
nodes.add(new TreeNode(8, 4, "曾孙节点1"));
nodes.add(new TreeNode(9, 4, "曾孙节点2"));
nodes.add(new TreeNode(10, 5, "曾孙节点3"));
List<TreeNode> tree = convertToTree(nodes);
// 打印树结构
printTree(tree, 0);
}
private static void printTree(List<TreeNode> nodes, int level) {
for (TreeNode node : nodes) {
StringBuilder indent = new StringBuilder();
for (int i = 0; i < level; i++) {
indent.append(" ");
}
System.out.println(indent + node.name);
printTree(node.children, level + 1);
}
}
}