java中将id,pid的树节点数据转换为children层级格式的数据

发布于:2025-04-14 ⋅ 阅读:(20) ⋅ 点赞:(0)

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);
    }
}

}