zoukankan      html  css  js  c++  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
  • 相关阅读:
    Hdu 5396 Expression (区间Dp)
    Lightoj 1174
    codeforces 570 D. Tree Requests (dfs)
    codeforces 570 E. Pig and Palindromes (DP)
    Hdu 5385 The path
    Hdu 5384 Danganronpa (AC自动机模板)
    Hdu 5372 Segment Game (树状数组)
    Hdu 5379 Mahjong tree (dfs + 组合数)
    Hdu 5371 Hotaru's problem (manacher+枚举)
    Face The Right Way---hdu3276(开关问题)
  • 原文地址:https://www.cnblogs.com/xcxcxcxc/p/5541142.html
Copyright © 2011-2022 走看看