魏晓东 发表于 2025-4-14 04:39:29

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

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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: java中将id,pid的树节点数据转换为children层级格式的数据