涉及到的算法问题思路

涉及到的算法问题思路

对于梅花雪树选中节点的删除:级联删除该节点下所有子孙节点

     private  List processGetSysFunPointList(String id, TReqSysDTO sysDTO)
            
throws  ParseException  {
        List rslist 
= new ArrayList();
        
//思路:
        
//1,找出当前节点
        
//2,找出当前节点的所有直接子节点
        
//3,分别找出每个直接子节点的直接子节点
        
//4,重复第3步操作,直至找出当前节点的所有子节点
        
        
//算法:
        
//1,先找出当前所有最新版本的节点,并封装成Map[pid,vo]数据结构,以提高算法查找效率。
        
//        注: 1)封装时遍历采用while循环结构以提高循环效率。
        
//            2)封装时对顶级节点,即父节点为空的节点,不进行封装处理。
        
//            3)封装结构的结果是:所有的非叶子节点的ID都包含map的keySet集合中;
        
//2,根据上面的思路写递归算法来求解当前节点的所有子节点
        
        
        Map map 
= new HashMap();
        List list 
= this.myReqSystemFunctionPointDAO.findAll(sysDTO);
        
if(list!=null){
            Iterator itr 
= list.iterator();
            
while(itr.hasNext()){
                SysFunTreeNodeVO vo 
= (SysFunTreeNodeVO)itr.next();
                
//找出当前当前节点
                if(id.equals(vo.getId())){
                    rslist.add(vo);
                }

                
//封装Map[pid,vo]数据结构,供递归算法使用
                String pid = vo.getParentSysFunPointId();
                
if(pid!=null && !pid.equals("")){//过滤顶级节点,顶级节点无需封装进map结构
                    if(map.containsKey(pid)){
                        ((List)map.get(pid)).add(vo);
                    }

                    
else{
                        List tmp 
= new ArrayList();
                        tmp.add(vo);
                        map.put(pid, tmp);
                    }

                }

            }

        }


        
//递归算法,找出当前节点的所有子节点
        List sons = findSons(id, map);
        
if(sons!=null){
            rslist.addAll(sons);
//添加子节点
        }

        
        
return rslist;
    }


    
public  List findSons(String id,Map srcmap) {
        List rslist 
= new ArrayList();
        
if(id!=null && srcmap!=null && srcmap.containsKey(id)){
            
//找出id的直接子节点。注:不是id的所有子节点,而是其一级子节点
            List sons = (List) srcmap.get(id);
            
if(sons!=null){
                rslist.addAll(sons);
//添加直接子节点
                Iterator itr = sons.iterator();            
                
while(itr.hasNext()){//遍历添加直接子节点的所有子节点
                    SysFunTreeNodeVO vo = (SysFunTreeNodeVO) itr.next();
                    List sonslist 
= findSons(vo.getId(), srcmap);
                    rslist.addAll(sonslist);
                }

            }

        }

        
return rslist;
    }



//封装成逗号隔开的串保存
  String fids = "";
  if(filesIdList !=null && filesIdList.size() > 0)
  {
   for(int i =0;i<filesIdList.size();i++)
   {
    fids = fids + filesIdList.get(i);
    if(filesIdList.size() >1 && i!=filesIdList.size()-1)
    {
     fids = fids + ",";
    }
   }
  } 


 

你可能感兴趣的:(涉及到的算法问题思路)