您的位置:首页 > 编程语言 > Java开发

Java 基本的递归写法

2016-03-11 14:55 330 查看
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

查看图片附件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: