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

打印 上一主题 下一主题

主题 1776|帖子 1776|积分 5328

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import java.util.*;
// 定义树节点类
class TreeNode {
int id;
int pid;
String name;
List children;
  1. public TreeNode(int id, int pid, String name) {
  2.     this.id = id;
  3.     this.pid = pid;
  4.     this.name = name;
  5.     this.children = new ArrayList<>();
  6. }
复制代码
}
public class TreeNodeConverter {
public static List convertToTree(List nodes) {
// 存储节点映射
Map<Integer, TreeNode> nodeMap = new HashMap<>();
// 存储根节点
List rootNodes = new ArrayList<>();
  1.     // 首先将所有节点放入映射中
  2.     for (TreeNode node : nodes) {
  3.         nodeMap.put(node.id, node);
  4.     }
  5.     // 构建树结构
  6.     for (TreeNode node : nodes) {
  7.         int pid = node.pid;
  8.         if (pid == 0) {
  9.             // 如果父节点 ID 为 0,说明是根节点
  10.             rootNodes.add(node);
  11.         } else {
  12.             // 找到父节点
  13.             TreeNode parent = nodeMap.get(pid);
  14.             if (parent != null) {
  15.                 parent.children.add(node);
  16.             }
  17.         }
  18.     }
  19.     return rootNodes;
  20. }
  21. public static void main(String[] args) {
  22.     List<TreeNode> nodes = new ArrayList<>();
  23.     nodes.add(new TreeNode(1, 0, "根节点"));
  24.     nodes.add(new TreeNode(2, 1, "子节点1"));
  25.     nodes.add(new TreeNode(3, 1, "子节点2"));
  26.     nodes.add(new TreeNode(4, 2, "孙节点1"));
  27.     nodes.add(new TreeNode(5, 2, "孙节点2"));
  28.     nodes.add(new TreeNode(6, 3, "孙节点3"));
  29.     nodes.add(new TreeNode(7, 3, "孙节点4"));
  30.     nodes.add(new TreeNode(8, 4, "曾孙节点1"));
  31.     nodes.add(new TreeNode(9, 4, "曾孙节点2"));
  32.     nodes.add(new TreeNode(10, 5, "曾孙节点3"));
  33.     List<TreeNode> tree = convertToTree(nodes);
  34.     // 打印树结构
  35.     printTree(tree, 0);
  36. }
  37. private static void printTree(List<TreeNode> nodes, int level) {
  38.     for (TreeNode node : nodes) {
  39.         StringBuilder indent = new StringBuilder();
  40.         for (int i = 0; i < level; i++) {
  41.             indent.append("  ");
  42.         }
  43.         System.out.println(indent + node.name);
  44.         printTree(node.children, level + 1);
  45.     }
  46. }
复制代码
}

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表