废话不多说了,直接给大家贴代码,具体代码如下所示:
//菜单树形结构 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实现遍历树形菜单两种实现代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站: