• 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
  • 相关阅读:
    vue生命周期
    vue input 循环渲染问题
    Node express post 大小设置
    webpack 好文章
    知识点的总结
    jsplumb 使用总结
    理解es6 中 arrow function的this
    分块编码(Transfer-Encoding: chunked)
    CGI的工作原理
    JS数组循环的性能和效率分析(for、while、forEach、map、for of)
  • 原文地址:https://www.cnblogs.com/xcxcxcxc/p/5541142.html
Copyright © 2020-2023  润新知