数据库中机构表为自身引用。
如果一个(org)机构有很多的下级机构而下级机构还有下级
这个时候我想用递归求出机构(org)下而包含的所有机构
怎么做。。我是这样写的不过有点问题public List<org> getAll(Org org){
    List<Org> list=new ArrayList();
      if(org.orgrazation){    //判断是否有子机构
             list.add(org);
    }
       for(Org org list){
            if(org.orgrazation){    //判断是否有子机构
               getAll(org);
            
            }      }
    return list;
}

解决方案 »

  1.   

    public List <org> getAll(Org org){ 
        List <Org> list=new ArrayList(); 
          if(org.orgrazation){    //判断是否有子机构 
                list.add(org); 
        } 
          for(Org o : list){ 
                if(o.orgrazation){    //判断是否有子机构 
                   List<Org> os = getAll(r); 
                 list.addAll(os);
                }       } 
        return list; 
    }
      

  2.   

    public List <org> getAll(Org org){ 
        List <Org> list=new ArrayList(); 
          if(!org.orgrazation){   
               return; //如果没有退出
        } 
          for(Org org list){ 
                if(org.orgrazation){    //判断是否有子机构 
                     list.add(org); 
                //判断是否有子机构
                 getAll(org);
          }              } 
        return list; 
    }
        
      

  3.   

    这个相当于找上下级关系
    你这递归明显的不是实际意义上的递归
      getAll(org); 这个返回一个list但是你没添加到当前这个结果集当中
    List <Org> list=new ArrayList(); 
          if(org.orgrazation){  
            list.add(org); //这里尽量用循环结果集将所有的下属机构都add到list当中
        } 
       for(int i = 0 ;i < list.Size();i++){
        Org suborg = (Org)list.get(i);
        if(suborg.orgrazation){
          list.add(suborg.suborg);//将所有的下属都添加进去 到i=listsize的时候就说明已经在没有下属关系可以添加了
       }
    }
      

  4.   

    public void getAll(Org org,List list){ 
            list.add(org);
            if(org.child.size()>0){    //有子机构 
                 for(int i=0;i<org.child.size();i++)
                {
                     Org child=org.child.get(i);
                     getAll(child,list);
                  }          }else                 //没有子机构 
             {
                   return;
              }
     
    }
      

  5.   

    public void getAll(Org org,List list){
            
            if(org.child.size()>0){    //有子机构
                  list.add(org);
                for(int i=0;i <org.child.size();i++)
                {
                    Org child=org.child.get(i);
                    getAll(child,list);
                  }          }else                //没有子机构
            {
                  return;
              }}
    [/Quote]