首页 > 其他分享 >非递归快速构建树

非递归快速构建树

时间:2024-09-04 09:02:47浏览次数:5  
标签:node TreeNode String 递归 public 构建 parentId 快速 id

@Data
public class TreeNode {

    /**
     * 节点id
     */
    private String id;

    /**
     * 节点名称
     */
    private String name;

    /**
     * 层级
     */
    private int level;

    /**
     *  父节点id
     */
    private String parentId;

    /**
     * 子节点
     */
    private List<TreeNode> children = new ArrayList<>();

    public TreeNode() {}

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

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

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

}
public class TreeNodeUtil {

    public static List<TreeNode> buildTree(List<TreeNode> orginals){
        // 创建Map,把所有原始数据的ID作为Key,原始数据对象作为VALUE
        Map<String, TreeNode> dataMap = new LinkedHashMap<>();
        for (TreeNode node : orginals) {
            dataMap.put(node.getId(), node);
        }
        List<TreeNode> result = new ArrayList<>();
        for (Map.Entry<String, TreeNode> entry : dataMap.entrySet()) {
            TreeNode node = entry.getValue();
            if (node.getParentId().equals("0")) {
                // 如果是顶层节点,直接添加到结果集合中
                result.add(node);
            } else {
                // 如果不是顶层节点,找到父节点,然后添加到父节点的子节点中
                if (dataMap.get(node.getParentId()) != null) {
                    dataMap.get(node.getParentId()).addChild(node);
                }
            }
        }
        return result;
    }

    public static void main(String[] args) {
        List<TreeNode> orginals = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            orginals.add(new TreeNode(i+"", "0", "name" + i));
        }
        for (int i = 1001; i <= 2000; i++) {
            orginals.add(new TreeNode(i+"", "1", "name" + i));
        }
        for (int i = 2001; i <= 3000; i++) {
            orginals.add(new TreeNode(i+"", "1001", "name" + i));
        }
        for (int i = 3001; i <= 4000; i++) {
            orginals.add(new TreeNode(i+"", "2001", "name" + i));
        }
        for (int i = 4001; i <= 5000; i++) {
            orginals.add(new TreeNode(i+"", "3001", "name" + i));
        }
        for (int i = 5001; i <= 6000; i++) {
            orginals.add(new TreeNode(i+"", "4001", "name" + i));
        }
        long start = System.currentTimeMillis();
        System.out.println("数据大小:"+orginals.size());
        List<TreeNode> treeNodes = TreeNodeUtil.buildTree(orginals);
//        System.out.println(JSONUtil.toJsonStr(treeNodes));
        System.out.println("耗时:"+(System.currentTimeMillis() - start));
    }

}

 

标签:node,TreeNode,String,递归,public,构建,parentId,快速,id
From: https://www.cnblogs.com/sunhao1234/p/18395783

相关文章

  • 函数的递归(初学)
    目录递归概念 递归例子 例1:阶乘计算例2:按顺序打印每一位 例3:运行时堆栈 递归误区递归概念//递归就是函数自己调用自己#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){ printf("hehe"); main(); return0;}//陷入了死循环 递归例子 ......
  • 利用LangChain构建MySQL数据库问答代理
    引言随着自然语言处理技术的飞速发展,尤其是大型语言模型(LLM)的应用日益广泛,人们对于如何更高效地与这些模型交互产生了浓厚的兴趣。LangChain是一个旨在简化与语言模型集成的开源框架,它使得开发者能够轻松地构建出强大的应用程序。本文将介绍如何使用LangChain结合MySQL数据......
  • 三路快速排序
    //快速排序functionquickSort(arr){if(arr.length<=1){returnarr;}constpivot=arr[0];constleft=[];constright=[];for(leti=1;i<arr.length;i++){if(arr[i]<pivot){left.push(arr[i]);}else{......
  • CMake构建学习笔记14-依赖库管理工具
    如果说做C/C++开发最大的痛点是什么,那么一定是缺少一个官方的统一的包管理器。认真的说,如果你要用C/C++干点什么,至少需要(Windows系统下):C/C++语言本身、标准库、以及操作系统API几乎干不了什么,除非你真的想从零开始造轮子。开始找一些现成的实现组成依赖库。最好看能不能找到预......
  • 第二章 快速上手Django框架
    1.终端安装pipinstalldjango==3.2C:\Python39 -python.exe -Scripts -pip.exe -django-admin.exe -Lib -re.py -random.py -site-pakages -django==3.2 ...2.命令行创建项目cd指定目录django-adminstartproject项目名mysite......
  • vue3整合antv x6实现图编辑器快速入门
    安装:npminstall@antv/x6--save如果使用umd包,可以使用下面三个CDN中的任何一个,默认使用X6的最新版:https://unpkg.com/@antv/x6/dist/index.jshttps://cdn.jsdelivr.net/npm/@antv/x6/dist/index.jshttps://cdnjs.cloudflare.com/ajax/libs/antv-x6/2.0.0/index.......
  • 使用LangChain与OctoAI集成:构建强大的AI应用
    使用LangChain与OctoAI集成:构建强大的AI应用引言在当今快速发展的AI领域,如何高效地利用大型语言模型(LLM)构建应用已成为开发者面临的重要挑战。本文将介绍如何使用LangChain框架与OctoAI服务相结合,轻松构建强大的AI应用。我们将深入探讨OctoAI的特性,以及如何通过Lang......
  • Python深入理解快速排序算法及其时间复杂度分析
    Python深入理解快速排序算法及其时间复杂度分析快速排序(QuickSort)是一种高效的排序算法,广泛应用于各种实际场景中。它采用分治法(DivideandConquer)策略,通过选择一个基准元素(pivot),将数组分成两部分,使得左侧部分的元素都小于基准元素,右侧部分的元素都大于基准元素。然后递......
  • 快速搭建一款可交互式的「地理空间」应用
    GreppoGitHub上的开源Python框架,可快速搭建一款可交互式的「地理空间」应用。该框架提供了一整套完整工具包,让你可以轻松打通数据、算法、可视化UI等模块,构建一款交互式应用。https://github.com/greppo-io/greppo ......
  • Java微服务架构设计:构建可扩展的服务
    Java微服务架构设计:构建可扩展的服务大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!微服务架构是一种将应用程序作为一套小服务开发的方法,每个服务运行在其独立的进程中,并通过轻量级的通信机制(通常是HTTPRESTfulAPI)进行交互。在Java中,构建微服务通......