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);
}
} }
  • 大小: 6.1 KB

Java 基本的递归写法的更多相关文章

  1. 快速排序基本思想,递归写法,python和java编写快速排序

    1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1], ...

  2. Java中的递归运算

    Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...

  3. Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法

    Atitit 表达式原理 语法分析 原理与实践 解析java的dsl  递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...

  4. [Java] [查找文件] [递归]]

    // 工具方法 private static FilenameFilter getFilter(final String mode) { return new FilenameFilter() { P ...

  5. Java中枚举的写法和用法

            在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法         关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...

  6. 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?

    笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...

  7. 2018.3.31 java中的递归

    java中的递归 1.概念 定义一个方法时,出现本方法调用本方法的过程,称之为递归 2.特点 必然有一个边界条件 使用递归代码往往更简洁,可读性强 3.什么时候使用递归 n的阶乘和n的累加定义 f(n ...

  8. 关于java的递归写法,经典的Fibonacci数的问题

    经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...

  9. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

随机推荐

  1. ceph部署

    一.部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用:     1台部署节点(配一块硬盘,运行ceph-depo ...

  2. 16.2 【C# 5】调用者信息特性

    16.2.1 基本行为 .NET 4.5引入了三个新特性(attribute),即 CallerFilePathAttribute . CallerLineNumber- Attribute 和 Ca ...

  3. DNS详细解析过程【转】

    转自:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baid ...

  4. 计蒜客 疑似病毒 (AC自动机 + 可达矩阵)

    链接 : Here! 背景 : 开始我同学是用 AC自动机 + DP 的方法来做这道题, 这道题的标签是 AC自动机, 动态规划, 矩阵, 按道理来说 AC自动机 + DP 应该是能过的, 但是他不幸 ...

  5. HUD 1426 Sudoku Killer (DFS)

    链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...

  6. 找零钱的算法实现(Java)

    简单的算法 基本思路就是将面值从大到小统计(外循环), 若当前金额大于某面值, 则当前金额减掉该面值, 并将面值对应张数+1, 继续往下判断(内循环) public void Change(int m ...

  7. Python中的@property装饰器

    要了解@property的用途,首先要了解如何创建一个属性. 一般而言,属性都通过__init__方法创建,比如: class Student(object): def __init__(self,n ...

  8. IE7浏览器下去除flash动画边框问题

    <object width="100%" height="100%" data="/templates/default/swf/guide.sw ...

  9. vue 底部bottomnav

    <template> <div id="foot"> <div class="tabBar"> <div class= ...

  10. SCU Right turn

    Right turn frog is trapped in a maze. The maze is infinitely large and divided into grids. It also c ...