1.首先我们得有一个树状结构的表,类似这种结构。必须得有 id,pid 其他的根据需要来。
我们叫它treeTbl表吧。这里pid为0的表示是顶级节点。
2.接着select * from treeTbl ,并将得到的list 转换成一个Map集合,
key 为 pid ,value 为 子元素对象集合或者子元素id集合之类的都可以,根据需要。
我这里只需要id,所以是定义为了List<string>类型。
Map<String,List<String>> map=new HashMap<String,List<String>>(); for(Object[] obj : list) { String id=obj[0].toString(); String pid=obj[1].toString(); if(map!=null && map.get(pid)!=null){ map.get(pid).add(dic_id); }else{ List<String> list_tmp=new ArrayList<String>(); list_tmp.add(id); map.put(pid,list_tmp); } }
3.递归遍历,说明在注释中
//最终得到的子孙集合 List<String> idList=new ArrayList<String>(); /* 这个pid的值根据需要来, 如果要获取整棵树,这里就填根节点的id,treeTbl表中的根节点的 id 为 0 如果是获取指定父级节点下的所有子孙节点,就填该父节点的 id 值 */ List<String> chidrenList=map.get(pid); /* 上面得到的chidrenList仅仅是底下一层的节点集合,也就是说只包含了子节点,未包含子节点下的所有子孙节点 如果变量pid表示第一层的话,这里我们从第二层开始递归 也就是不停的寻找下一层下一层下一层……直到不存在下一层为止 如何判断有无下一层呢,之前创建好的HashMap已存好父子关系,用它来判断就好 */ for(String id : childrenList){ //用于递归的方法,只有把 id 下的所有子孙节点全部存入idList,才会进行下一轮循环 getChildrens(map, id ,idList); } //将之前第一层子节点也加入进来(这个地方根据需要来) idList.addAll(chidrenList);
private void getChildrens(Map<String,List<String>> map,String id,List<String> idList) { //查询当前id下的子级的集合 List<String> list=map.get(id); //如果list不为空,则表示该id下还有子id,重新调用当前方法进行递归查询 if(list!=null && list.size()>0){ for(String id2 : list){ //存入集合 idList.add(id2); //再查一次 getChildrens(map, id2, idList); } } }
相关推荐
java程序的递归算法,列出某个目录下的所有子目录和文件
递归调用的折半查找java代码,算法分析与设计实验报告。
通过递归方法构建树形结构数据,比如无限层级菜单,可供新手学习递归算法
话不多说,请看代码 function addd(n){ if(n==1){ return 1; } return n*addd(n-1); } function add(n){ var num=1; for(var i=1;i<n;i++){ num=num*i; } return num; }
北京动力节点-Java编程零基础教程-097-Java基本语法-控制语句-for语句-for语句的其它写法.avi 北京动力节点-Java编程零基础教程-098-Java基本语法-控制语句-while语句-基本语法.avi 北京动力节点-Java编程零基础...
红黑树红黑二叉树的递归 Java 实现,正在进行中。 我是来自澳大利亚墨尔本的 21 岁的计算机程序员。 欢迎为这个项目贡献任何你想要的代码或评论。
基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 < java.util > Collection接口 77 < java.util >Iterator接口 78 < java.util >List接口 78 < java.util >Set接口 80 < java....
1.1.1 如何实现一个高效的单向链表逆序输出? 出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人 参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。
leetcode 338 leetcode-java LeetCode Java Solution 题目 : : : ...解法:递归 ...递归终止条件 ...递归过程 ...解法:递归 ...递归终止条件 ...错误写法:root.left=invertTree(root.right); TreeNode left = invert
实现一个BBS可以采取多种方法,该项目采用树状结构来实现,用户可以很容易看出谁回复了谁,自己要回复谁也很方便.对于管理员来说,登陆管理员页面可以进行数据的增、删、查、改,项目中使用了多种分页的写法.
用递归求N!=N*(N-1)*(N-2)*...*2*1; long digui(int i) {if(i==0||i==1) { return 1; } else { return i*digui(i-1); } } 4. 写一个单例模式(遇到两次) public class Test { private Test...
{1.11.3}递归调用}{41}{subsection.1.11.3} {1.12}Java API}{41}{section.1.12} {1.13}Linux命令}{41}{section.1.13} {1.13.1}基本查看、移动}{41}{subsection.1.13.1} {1.13.2}权限}{42}{subsection.1.13.2} ...
leetcode下载 JavaPractise 这个repo是个人学习算法、JVM、JUC、设计模式的一些代码记录 algorithm是各个类别的题目,book文件夹下是一些算法书(《剑指Offer》...5.JavaABC包下是一些Java基础知识的代码练习 nio 反射
Array的配置项目没有上面介绍的那么直观,默认情况下DWR装载所有的基本类型和可装载的对象,这些包括String,Date等先前介绍的类型.java高级程序员可能会理解为什么match的这行有点奇怪. [Z"/> [B"/> [S"/> [I"/> [J"/>...
该小项目完整全面整理了java解析json各中写法,以及json的生成、遍历。 该项目收集整理json所需的jar包,使用文档。 /** * json的生成、遍历 */ import java.util.*; import net.sf.json.JSONArray; import ...
不用想,绝对的暴力写法。 或者是循环两个链表,然后两两相比较,就像: for (){ for (){ if (){} } } 好吧,其实这道题精华在于可以使用递归,这个。。。来个草图简单描述下。 初步: 两个链表的首议进行比较 ...
10.3 递归子查询 273 10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 ...
--(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from emp; --字符串的连接 8、select distinct deptno from emp; --消除deptno字段重复的值 9、...