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代码递归的折半查找算法 #### 算法概述 递归版本的折半查找算法是一种高效的搜索技术,适用于已排序的数组。它的工作原理是将问题分解为更小的问题,直到找到目标值或确定目标值不存在于数组中为止。这种...
在Java语言中,递归构建树形结构是编程基础之一,熟练掌握递归构建树对于处理多层次数据结构和算法设计都是非常有帮助的。通过递归构建树形结构数据的示例,新手可以更好地理解递归算法在实际问题中的应用,例如在...
递归过程将持续到基本情况(`n=1`)为止,然后逐层返回结果。 2. 循环实现: 虽然递归很直观,但过度使用可能导致性能问题,因为每次函数调用都会消耗额外的内存(用于存储调用栈)。因此,有时使用循环实现递归...
北京动力节点-Java编程零基础教程-097-Java基本语法-控制语句-for语句-for语句的其它写法.avi 北京动力节点-Java编程零基础教程-098-Java基本语法-控制语句-while语句-基本语法.avi 北京动力节点-Java编程零基础...
通过递归查询,我们可以轻松地获取任意部门及其所有子部门的信息,无需编写复杂的Java或其他编程语言代码。 在进行递归查询优化时,要注意避免无限循环和性能问题,确保`CONNECT BY`条件正确无误,必要时还可以使用...
在Java中,红黑树常被用于`java.util.TreeMap`和`java.util.TreeSet`等集合类的底层实现。学习红黑树不仅能够提高编程技能,也有助于理解更高级的自平衡树结构,如AVL树。通过阅读和分析提供的代码,你可以深入理解...
Java的java.io.File类提供了对文件和目录的基本操作,如列举目录下的文件和子目录。通过递归调用File的listFiles()方法,我们可以获取到所有子目录和文件,并将它们转化为JTree或TreeView所需的TreeNode或...
本文将介绍Java中实现斐波那契数列的三种方法:普通写法(非递归)、数组形式的递归写法和传统的递归形式,以及它们的优缺点和适用场景。 首先,我们来看非递归的迭代法。这种方法的核心思想是通过循环结构逐步构建...
Java 学习笔记 Java 是一种广泛使用的编程语言,本资源摘要提供了 Java 学习笔记的关键要点,涵盖了 Java ...本资源摘要信息提供了 Java 学习笔记的关键要点,旨在帮助读者快速了解 Java 语言的基本概念和编程技巧。
**示例代码 - 递归写法:** ```java import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int N = reader.nextInt(); System....
首先,绪论部分对课程的总体进行了介绍,明确本课程涵盖的主要内容,包括绪论、结构化程序设计、面向对象程序设计、数组、字符串、向量与哈希表、泛型、枚举与for语句的简化写法、异常处理、递归和单体程序设计方法...
* 三元运算符的使用:在 Java 中,三元运算符可以用来简化条件语句的写法。 这五个题目涵盖了 Java 的基础知识,如递归、循环、数组、条件语句等,并且能够帮助开发者更好地理解和掌握 Java 语言。
它的基本思想是分治法(Divide and Conquer),即把一个大问题分解成若干个小问题来解决,最终将小问题的结果合并得到原问题的解。在这个过程中,快速排序通过选取一个“基准”元素,将数组分成两部分,一部分的所有...
Java递归删除文件是指使用递归算法来删除文件夹下所有文件的方法。在上面的代码中,我们使用了递归算法来删除文件夹下所有文件。该方法将检查文件夹下所有文件,如果是文件夹,则递归调用该方法来删除文件夹下的所有...
6. **异常处理、递归和单体程序设计方法**:异常处理是Java中处理错误的重要机制,递归是函数调用自身的技术,单体设计则涉及程序的整体结构和模块化。 7. **文件与数据流**:介绍如何读写文件以及使用I/O流处理...
标题提到的"xml转对象封装的简单与复杂xml的转化写法"主要涉及以下知识点: 1. **JDOM库**:JDOM是Java Document Object Model的缩写,它提供了一种在内存中表示XML文档的方式,通过创建SAXBuilder或DOMBuilder实例...
以上四个例子展示了JAVA中基本的算法应用,包括递归、循环、条件判断以及数学计算。在实际编程中,这类算法经常用于解决各种复杂问题,比如数据处理、计算、优化等。熟练掌握这些基本算法有助于提升编程能力,为解决...
为了防止无限循环,递归函数必须有一个或多个基本情况(base case),当达到基本情况时,递归就会停止。 #### 示例 计算阶乘的递归方法: ```java public class Factorial { public static int factorial(int n)...
5. 输入输出:文档还展示了如何使用Java的Swing组件 javax.swing.JOptionPane 来获取用户输入,并且有基本的输入输出操作,即System.out.print。在编写算法题目时,常常需要从用户获取输入并打印输出结果。 6. 条件...