当前位置: 首页 > 编程笔记 >

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

郦翰学
2023-03-14
本文向大家介绍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<Dept> searchAllDept() throws Exception{
List<Object[]> listAllObject=new ArrayList<Object[]>();
List<Object[]> tmp=new ArrayList<Object[]>();
List<Dept> listAllDept=new ArrayList<Dept>();
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<Object[]> 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<Dept> list = dept.getChildren();
if (list == null) {
list = new ArrayList<Dept>();
}
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<Dept> 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<Dept> getChildren() {
return children;
}
public void setChildren(List<Dept> children) {
this.children = children;
}
public String toString(){
return this.getDname();
}
}

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

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

 类似资料:
  • 所以我在研究树遍历算法。例如,在K-d树遍历中,我们的目标是遍历节点直至叶子。这与其说是一个树搜索,不如说是一个根到叶的遍历。 在这种情况下,递归解决方案就足够了。但是,在C等语言中,递归调用函数需要将值推送到堆栈上,并在堆栈帧之间跳跃等。标准的递归方法类似于: 因此,考虑到二叉树有一个明确的上界(我相信这也可以扩展到其他树类型),以迭代方式执行此遍历是否更有效: 二叉树的最大高度是它的节点数,而

  • 本文向大家介绍Java语言实现非递归实现树的前中后序遍历总结,包括了Java语言实现非递归实现树的前中后序遍历总结的使用技巧和注意事项,需要的朋友参考一下 前言 三种遍历的递归写法都很好写,所以总结一下非递归写法。 先贴一张图复习一下三种遍历方式就进入正文啦~ 【注:本文所有代码实现中树的结点定义如下: 1.前序遍历 实现思路: 前序遍历的顺序是:根结点 -> 左孩子 -> 右孩子 借助一个栈结构

  • 问题内容: 有没有一种方法(在jQuery或JavaScript中)循环遍历每个对象以及子对象和孙子对象等等? 如果是的话…我还能读他们的名字吗? 例: 所以循环应该做这样的事情… 问题答案: 您正在寻找循环: 请注意,循环将遍历任何可枚举的属性,包括那些添加到对象原型的属性。为了避免作用于这些属性,可以使用方法检查该属性是否仅属于该对象: 递归执行循环就像编写递归函数一样简单:

  • 问题内容: 是否有人对未知结构的NSDictionary进行了递归有序遍历?我想学习任何NSDictionary,并按层次结构顺序处理每个级别。 1)此数据来自经过验证的JSON。可以肯定地说,从诸如SBJSON(JSON框架)之类的框架创建的NSDictionary仅会导致嵌套字典,数组和任意叶的组合吗? 2)如何使用适用于数组和字典的快速枚举完成泛型遍历?使用下面的代码,一旦我到达数组中的字典

  • 本文向大家介绍C++实现二叉树非递归遍历方法实例总结,包括了C++实现二叉树非递归遍历方法实例总结的使用技巧和注意事项,需要的朋友参考一下 一般来说,二叉树的遍历是C++程序员在面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画是不难写出代码的。现举一个非递归遍历的方法如下,供大家参考。 具体代码如下: 希望本文所述对大家的C++算法学习有所帮助。

  • 本文向大家介绍java实现遍历树形菜单两种实现代码分享,包括了java实现遍历树形菜单两种实现代码分享的使用技巧和注意事项,需要的朋友参考一下 文本主要向大家分享了java实现遍历树形菜单的实例代码,具体如下。 OpenSessionView实现: TreeAction实现 总结 以上就是本文关于java实现遍历树形菜单两种实现代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站: