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 基本的递归写法的更多相关文章
- 快速排序基本思想,递归写法,python和java编写快速排序
1.基本思想 快速排序有很多种编写方法,递归和分递归,分而治之法属于非递归,比递归简单多了.在这不使用代码演示.下面我们来探讨一下快速排序的递归写法思想吧. 设要排序的数组是A[0]……A[N-1], ...
- Java中的递归运算
Java中的递归运算是一种在自己的方法内部调用自己的方法 递归的设计思想是:把一个复杂的问题,分解为若干个等同的子问题,重复执行,直到之问题能够简单到直接求解,这样复杂的问题就得以解决. 递归运算有两 ...
- Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法
Atitit 表达式原理 语法分析 原理与实践 解析java的dsl 递归下降是现阶段主流的语法分析方法 于是我们可以把上面的语法改写成如下形式:1 合并前缀1 语法分析有自上而下和自下而上两种分析 ...
- [Java] [查找文件] [递归]]
// 工具方法 private static FilenameFilter getFilter(final String mode) { return new FilenameFilter() { P ...
- Java中枚举的写法和用法
在公司代码中,用了一大堆的枚举,看得我好懵逼.下面开始看看枚举怎么写和怎么用. 一.枚举的写法 关于枚举的写法,网上好多这方面的知识.这里直接贴一个我自己写的枚举类的代 ...
- 【笔试题】Java 中如何递归显示一个目录下面的所有目录和文件?
笔试题 Java 中如何递归显示一个目录下面的所有目录和文件? import java.io.File; public class Test { private static void showDir ...
- 2018.3.31 java中的递归
java中的递归 1.概念 定义一个方法时,出现本方法调用本方法的过程,称之为递归 2.特点 必然有一个边界条件 使用递归代码往往更简洁,可读性强 3.什么时候使用递归 n的阶乘和n的累加定义 f(n ...
- 关于java的递归写法,经典的Fibonacci数的问题
经典的Fibonacci数的问题 主要想展示一下迭代与递归,以及尾递归的三种写法,以及他们各自的时间性能. public class Fibonacci { /*迭代*/ public static ...
- Java算法之递归打破及在真实项目中的使用实例
开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...
随机推荐
- ceph部署
一.部署准备: 准备5台机器(linux系统为centos7.6版本),当然也可以至少3台机器并充当部署节点和客户端,可以与ceph节点共用: 1台部署节点(配一块硬盘,运行ceph-depo ...
- 16.2 【C# 5】调用者信息特性
16.2.1 基本行为 .NET 4.5引入了三个新特性(attribute),即 CallerFilePathAttribute . CallerLineNumber- Attribute 和 Ca ...
- DNS详细解析过程【转】
转自:http://blog.csdn.net/crazw/article/details/8986504 先说一下DNS的几个基本概念: 一. 根域 就是所谓的“.”,其实我们的网址www.baid ...
- 计蒜客 疑似病毒 (AC自动机 + 可达矩阵)
链接 : Here! 背景 : 开始我同学是用 AC自动机 + DP 的方法来做这道题, 这道题的标签是 AC自动机, 动态规划, 矩阵, 按道理来说 AC自动机 + DP 应该是能过的, 但是他不幸 ...
- HUD 1426 Sudoku Killer (DFS)
链接 : Here! 思路 : 记录下所有 "?" , 出现的位置, 然后 $DFS$ 一下, 对于每个位置来说都可以填充 $9$ 种数值, 然后对于判断填充是否合法需要三个标记数 ...
- 找零钱的算法实现(Java)
简单的算法 基本思路就是将面值从大到小统计(外循环), 若当前金额大于某面值, 则当前金额减掉该面值, 并将面值对应张数+1, 继续往下判断(内循环) public void Change(int m ...
- Python中的@property装饰器
要了解@property的用途,首先要了解如何创建一个属性. 一般而言,属性都通过__init__方法创建,比如: class Student(object): def __init__(self,n ...
- IE7浏览器下去除flash动画边框问题
<object width="100%" height="100%" data="/templates/default/swf/guide.sw ...
- vue 底部bottomnav
<template> <div id="foot"> <div class="tabBar"> <div class= ...
- SCU Right turn
Right turn frog is trapped in a maze. The maze is infinitely large and divided into grids. It also c ...