posts - 167,  comments - 30,  trackbacks - 0

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

    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 + ",";
    }
   }
  } 


 

posted on 2009-12-04 10:50 David1228 阅读(289) 评论(0)  编辑  收藏 所属分类: 算法总结

只有注册用户登录后才能发表评论。


网站导航:
 

<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

新闻分类

新闻档案

相册

收藏夹

Java

Linux知识相关

Spring相关

云计算/Linux/虚拟化技术/

友情博客

多线程并发编程

开源技术

持久层技术相关

搜索

  •  

积分与排名

  • 积分 - 353972
  • 排名 - 155

最新评论

阅读排行榜

评论排行榜