`
ronon
  • 浏览: 187047 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

Java 基本的递归写法

    博客分类:
  • java
 
阅读更多

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程序的递归算法

    java程序的递归算法,列出某个目录下的所有子目录和文件

    Java代码递归的折半查找算法

    递归调用的折半查找java代码,算法分析与设计实验报告。

    递归构建一整棵树

    通过递归方法构建树形结构数据,比如无限层级菜单,可供新手学习递归算法

    javascript中递归的两种写法

    话不多说,请看代码 function addd(n){ if(n==1){ return 1; } return n*addd(n-1); } function add(n){ var num=1; for(var i=1;i&lt;n;i++){ num=num*i; } return num; }

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    北京动力节点-Java编程零基础教程-097-Java基本语法-控制语句-for语句-for语句的其它写法.avi 北京动力节点-Java编程零基础教程-098-Java基本语法-控制语句-while语句-基本语法.avi 北京动力节点-Java编程零基础...

    RedBlackTree:红黑二叉树的递归Java实现

    红黑树红黑二叉树的递归 Java 实现,正在进行中。 我是来自澳大利亚墨尔本的 21 岁的计算机程序员。 欢迎为这个项目贡献任何你想要的代码或评论。

    Java基础知识点总结.docx

    基本数据类型对象包装类★★★☆ 75 集合框架:★★★★★,用于存储数据的容器。 76 &lt; java.util &gt; Collection接口 77 &lt; java.util &gt;Iterator接口 78 &lt; java.util &gt;List接口 78 &lt; java.util &gt;Set接口 80 &lt; java....

    2023阿里java面试题

    1.1.1 如何实现一个高效的单向链表逆序输出? 出题人:阿里巴巴出题专家:昀龙/阿里云弹性人工智能负责人 参考答案:下面是其中一种写法,也可以有不同的写法,比如递归等。供参考。

    leetcode338-leetcode-java:力扣Java解决方案

    leetcode 338 leetcode-java LeetCode Java Solution 题目 : : : ...解法:递归 ...递归终止条件 ...递归过程 ...解法:递归 ...递归终止条件 ...错误写法:root.left=invertTree(root.right); TreeNode left = invert

    Java树状结构实现BBS

    实现一个BBS可以采取多种方法,该项目采用树状结构来实现,用户可以很容易看出谁回复了谁,自己要回复谁也很方便.对于管理员来说,登陆管理员页面可以进行数据的增、删、查、改,项目中使用了多种分页的写法.

    最新JAVA编程题全集_50题及答案

    用递归求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...

    Java学习笔记-个人整理的

    {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下载-JavaLearn:算法、JVM、JUC、设计模式学习记录(Java语言实现)

    leetcode下载 JavaPractise 这个repo是个人学习算法、JVM、JUC、设计模式的一些代码记录 algorithm是各个类别的题目,book文件夹下是一些算法书(《剑指Offer》...5.JavaABC包下是一些Java基础知识的代码练习 nio 反射

    DWR.xml配置文件说明书(含源码)

    Array的配置项目没有上面介绍的那么直观,默认情况下DWR装载所有的基本类型和可装载的对象,这些包括String,Date等先前介绍的类型.java高级程序员可能会理解为什么match的这行有点奇怪. [Z"/&gt; [B"/&gt; [S"/&gt; [I"/&gt; [J"/&gt;...

    json的解析

    该小项目完整全面整理了java解析json各中写法,以及json的生成、遍历。 该项目收集整理json所需的jar包,使用文档。 /** * json的生成、遍历 */ import java.util.*; import net.sf.json.JSONArray; import ...

    数据结构

    不用想,绝对的暴力写法。 或者是循环两个链表,然后两两相比较,就像: for (){ for (){ if (){} } } 好吧,其实这道题精华在于可以使用递归,这个。。。来个草图简单描述下。 初步: 两个链表的首议进行比较 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    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 ...

    精髓Oralcle讲课笔记

    --(将sal的查询结果转化为字符串,与ename连接到一起,相当于Java中的字符串连接) 7、select ename||'afasjkj' from emp; --字符串的连接 8、select distinct deptno from emp; --消除deptno字段重复的值 9、...

Global site tag (gtag.js) - Google Analytics