热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Java递归遍历树形结构的实现代码

这篇文章主要介绍了Java递归遍历树形结构的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

废话不多说了,直接给大家贴代码,具体代码如下所示:

//菜单树形结构 
public JSONArray treeMenuList(JSONArray menuList, int parentId) { 
JSONArray childMenu = new JSONArray(); 
for (Object object : menuList) { 
JSONObject jsOnMenu= JSONObject.fromObject(object); 
int menuId = jsonMenu.getInt("id"); 
int pid = jsonMenu.getInt("parentId"); 
if (parentId == pid) { 
JSONArray c_node = treeMenuList(menuList, menuId); 
jsonMenu.put("childNode", c_node); 
childMenu.add(jsonMenu); 
} 
} 
return childMenu; 
} 
public static void main(String args[]) { 
MenuCacheService menuCacheService = new MenuCacheService(); 
JSONArray jsOnArray= new JSONArray(); 
Menu menu1 = new Menu(); 
menu1.setId(1l); 
menu1.setParentId(0); 
menu1.setLevel(0); 
Menu menu2 = new Menu(); 
menu2.setId(2l); 
menu2.setParentId(0); 
menu2.setLevel(0); 
Menu menu3 = new Menu(); 
menu3.setId(3l); 
menu3.setParentId(2); 
menu3.setLevel(1); 
Menu menu4 = new Menu(); 
menu4.setId(4l); 
menu4.setParentId(2); 
menu4.setLevel(1); 
Menu menu5 = new Menu(); 
menu5.setId(5l); 
menu5.setParentId(4); 
menu5.setLevel(2); 
Menu menu6 = new Menu(); 
menu6.setId(6l); 
menu6.setParentId(1); 
menu6.setLevel(1); 
jsonArray.add(menu1); 
jsonArray.add(menu2); 
jsonArray.add(menu3); 
jsonArray.add(menu4); 
jsonArray.add(menu5); 
jsonArray.add(menu6); 
System.out.print(menuCacheService.treeMenuList(jsonArray,0)); 
}

ps:java实现树的递归遍历(用于实现折叠菜单)

1.核心算法

package com.zf.tag.dao;
import java.util.ArrayList;
import java.util.List;
import com.zf.tag.entity.dept.Dept;
public class DeptDao extends BaseDao{
public static List searchAllDept() throws Exception{
List listAllObject=new ArrayList();
List tmp=new ArrayList();
List listAllDept=new ArrayList();
String sql="select id,dname,up_did from tbl_dept";
listAllObject=getResult(sql);
for (Object[] row : listAllObject) {
Object[] ro = new Object[3];
ro[0] = row[0];
ro[1] = row[1];
ro[2] = row[2];
tmp.add(row);
}
for (Object[] row : tmp) {
if (null == row[2]) {
Dept d = new Dept();
d.setId(Integer.parseInt(String.valueOf(row[0])));
d.setDname(String.valueOf(row[1]));
listAllDept.add(d);
fomateDept(tmp, d);
}
}
return listAllDept;
}
private static void fomateDept(List tmp, Dept dept) {
for (Object[] row : tmp) {
if ((null != row[2])
&& Integer.parseInt(String.valueOf(row[2])) == dept.getId()) {
Dept d = new Dept();
d.setId(Integer.parseInt(String.valueOf(row[0])));
d.setDname(String.valueOf(row[1]));
List list = dept.getChildren();
if (list == null) {
list = new ArrayList();
}
list.add(d);
dept.setChildren(list);
fomateDept(tmp, d);
}
}
}
}

2.实体类(部门)

package com.zf.tag.entity.dept;
import java.util.List;
public class Dept {
private Integer id;
private String dname;
private List children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public String toString(){
return this.getDname();
}
}

以上所述是小编给大家介绍的Java递归遍历树形结构的相关内容,希望对大家有所帮助!

更多精彩内容请关注公众号【Java技术迷】,可以通过以下二维码关注


推荐阅读
  • 本文探讨了利用JavaScript实现集合的对称差集算法的方法。该算法旨在处理多个数组作为输入参数,同时保留每个数组中元素的原始顺序。算法不会移除单个数组内的重复元素,但会删除在不同数组之间出现的重复项。通过这种方式,能够有效地计算出多个数组的对称差集。 ... [详细]
  • 本文详细解析了微信服务端示例类的功能与应用。其中,`ClientResponseHandler` 类主要用于处理微信支付所需的响应数据,而 `TenpayHttpClient` 则是对 HTTP 请求(包括 GET 和 POST 方法)进行了封装,以便在内部调用时更加便捷和高效。这些工具类在实际开发中起到了关键作用,开发者无需深入了解其底层实现细节,即可轻松集成微信支付功能。 ... [详细]
  • 算法学习心得与经验总结
    在算法学习的过程中,我总结了一些宝贵的心得和经验。本文将重点探讨莫比乌斯反演技巧的应用,并提供详细的实例解析。通过不断的学习和实践,我逐步掌握了这一复杂但强大的工具。此外,文章还将分享一些实用的学习资源和参考资料,帮助读者更好地理解和应用这些算法。希望本文能为算法学习者提供有价值的参考和指导。 ... [详细]
  • 业务团队与独立团队在数据分析领域的效能对比:谁更胜一筹?
    业务团队与独立团队在数据分析领域的效能对比:谁更胜一筹? ... [详细]
  • AIX编程挑战赛:AIX正方形问题的算法解析与Java代码实现
    在昨晚的阅读中,我注意到了CSDN博主西部阿呆-小草屋发表的一篇文章《AIX程序设计大赛——AIX正方形问题》。该文详细阐述了AIX正方形问题的背景,并提供了一种基于Java语言的解决方案。本文将深入解析这一算法的核心思想,并展示具体的Java代码实现,旨在为参赛者和编程爱好者提供有价值的参考。 ... [详细]
  • 深入解析C语言中的动态规划算法:以背包问题为例
    本文深入探讨了C语言中动态规划算法的应用,以经典的背包问题为例进行详细解析。通过实例分析,展示了如何利用动态规划解决复杂优化问题,并提供了高效的代码实现方法。文章不仅涵盖了算法的基本原理,还讨论了其在实际编程中的应用技巧和优化策略,为读者提供了全面的理解和实践指导。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 在掌握Promise调用链的过程中,理解其在异步执行中的核心作用至关重要。链式调用不仅简化了代码结构,提高了可读性,还增强了程序的健壮性和维护性。类似于jQuery中常用的链式调用,如 `$(#app).show().css('color', 'red')`,Promise的链式调用通过 `.then()` 方法实现了异步操作的无缝衔接,使得复杂的异步流程更加直观和高效。掌握这些技巧将有助于开发者更好地处理异步编程中的常见问题,提升开发效率。 ... [详细]
  • 2012年9月12日优酷土豆校园招聘笔试题目解析与备考指南
    2012年9月12日,优酷土豆校园招聘笔试题目解析与备考指南。在选择题部分,有一道题目涉及中国人的血型分布情况,具体为A型30%、B型20%、O型40%、AB型10%。若需确保在随机选取的样本中,至少有一人为B型血的概率不低于90%,则需要选取的最少人数是多少?该问题不仅考察了概率统计的基本知识,还要求考生具备一定的逻辑推理能力。 ... [详细]
  • 深入解析MySQL中的回表查询与索引覆盖技术
    在MySQL中,回表查询与索引覆盖技术是优化查询性能的重要手段。回表查询是指当使用非聚集索引进行查询时,由于非聚集索引的B-Tree叶子节点中仅存储了对应行数据的主键值,因此需要通过主键再次访问聚簇索引来获取完整数据记录。而索引覆盖则是在查询所需的所有列都包含在某个索引中,从而避免了额外的回表操作,显著提高了查询效率。本文将深入探讨这两种技术的原理及其应用场景,帮助读者更好地理解和优化MySQL查询性能。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 2020年高薪专业排行榜揭晓:计算机科学之外还有哪些值得关注的选择?
    近日,《2020年中国大学生就业报告》正式发布,揭示了除计算机科学外,多个高薪专业值得关注。报告指出,金融工程、电子信息工程、软件工程等领域的毕业生薪资水平同样表现优异,这些专业的就业前景和发展潜力不容忽视。此外,随着新兴行业的崛起,如大数据分析、人工智能和生物技术,相关专业的人才需求也在持续增长,为学生提供了更多优质的职业选择。 ... [详细]
  • #30 序列压缩算法优化与实现
    本文探讨了序列压缩算法的优化与实现,旨在提高数据存储效率和处理速度。通过对现有算法的深入分析,提出了一种新的优化方法,该方法在保持高压缩比的同时,显著降低了计算复杂度。实验结果表明,新方法在多种数据集上均表现出色,具有广泛的应用前景。 ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文介绍了一种算法,用于计算当前日期在本年度的具体周数。该方法由作者王峰提出,通过私有函数 `weekOfYear` 实现,能够准确地确定当前日期在一年中的周位置。此算法在日历计算和时间管理中具有广泛应用,适用于各种编程语言和应用场景。 ... [详细]
author-avatar
房东的猫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有