当前位置: 首页 > article >正文

java实现树形递归

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class TreeBuilder {

    // 定义树节点结构
    static class TreeNode {
        private int id;
        private int parentId;
        private String name;
        private List<TreeNode> children = new ArrayList<>();

        public TreeNode(int id, int parentId, String name) {
            this.id = id;
            this.parentId = parentId;
            this.name = name;
        }

        public int getId() {
            return id;
        }

        public int getParentId() {
            return parentId;
        }

        public String getName() {
            return name;
        }

        public List<TreeNode> getChildren() {
            return children;
        }

        public void addChild(TreeNode child) {
            this.children.add(child);
        }

        @Override
        public String toString() {
            return "TreeNode{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", children=" + children +
                    '}';
        }
    }

    /**
     * 构建树形结构
     * @param nodes 原始节点列表
     * @return 树的根节点列表
     */
    public static List<TreeNode> buildTree(List<TreeNode> nodes) {
        // 创建一个映射,用于快速查找节点
        Map<Integer, TreeNode> nodeMap = nodes.stream()
                .collect(Collectors.toMap(TreeNode::getId, node -> node));

        // 保存根节点列表
        List<TreeNode> rootNodes = new ArrayList<>();

        // 构建树形结构
        for (TreeNode node : nodes) {
            if (node.getParentId() == 0) {
                // 根节点
                rootNodes.add(node);
            } else {
                // 找到父节点并将当前节点添加为其子节点
                TreeNode parent = nodeMap.get(node.getParentId());
                if (parent != null) {
                    parent.addChild(node);
                }
            }
        }

        return rootNodes;
    }

    public static void main(String[] args) {
        // 模拟数据
        List<TreeNode> nodeList = new ArrayList<>();
        nodeList.add(new TreeNode(1, 0, "Root1"));
        nodeList.add(new TreeNode(2, 0, "Root2"));
        nodeList.add(new TreeNode(3, 1, "Child1.1"));
        nodeList.add(new TreeNode(4, 1, "Child1.2"));
        nodeList.add(new TreeNode(5, 3, "Child1.1.1"));
        nodeList.add(new TreeNode(6, 2, "Child2.1"));

        // 构建树
        List<TreeNode> tree = buildTree(nodeList);

        // 打印结果
        System.out.println(tree);
    }
}


http://www.kler.cn/a/507263.html

相关文章:

  • doris: Flink导入数据
  • tomcat文件目录讲解
  • 【Git版本控制器--1】Git的基本操作--本地仓库
  • springMVC实现文件上传
  • 自动化办公|xlwings简介
  • (即插即用模块-Attention部分) 四十四、(ICIP 2022) HWA 半小波注意力
  • flutter在使用gradle时的加速
  • python中数据可视化库(Matplotlib)
  • PCL 获取指定区域的点【2025最新版】
  • 万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用
  • 如何使用Ultralytics训练自己的yolo5 yolo8 yolo10 yolo11等目标检测模型
  • 强化学习-蒙特卡洛方法
  • 数据库基础实验1(创建表,设置外键,检查,不为空,主键等约束)安装mysql详细步骤
  • 通过智能合约攻击漏洞:夺取合约所有权并提取余额
  • 立创开发板入门第六课 音频-扬声器和麦克风 I2S驱动
  • 3 前端(上): Web开发相关概念 、HTML语法、CSS语法
  • 【Golang 面试题】每日 3 题(三十)
  • MiniCPM-o 2.6:开源大型语言模型在多模态任务上超越GPT-4o和Claude 3.5
  • 【Vue】Vue组件--下
  • Linux和Docker常用终端命令:保姆级图文详解
  • Apache Hop从入门到精通 第三课 Apache Hop下载安装
  • 微服务的自我修养:从拆分到秩序的进化论
  • Redis监控系统:基于Redis Exporter的性能指标可视化
  • 二进制/源码编译安装mysql 8.0
  • Visual Studio Community 2022(VS2022)安装方法
  • 【Pico串流预览】使用“PICO Unity Live Preview Plugin”和PDC工具进行实时预览