zoukankan      html  css  js  c++  java
  • 算法----递归

    递归的精髓在于某一个方法具体是做什么的!

    比如下面setChild(),查询节点所有的子节点。

        public List<TreeNode> transDepartment(List<Qydy> rootList){
            List<TreeNode> nodeList = new ArrayList<>();
            for (Qydy qydy : rootList) {
                TreeNode treeNode = new TreeNode();
                treeNode.setId(qydy.getQYDY_PKID());
                treeNode.setText(qydy.getQYMC());
                treeNode.setAttributes(qydy);
                //表明是一级父类
                if (1==qydy.getCJ()){
    //                treeNode.setState("open");
                    nodeList.add(treeNode);
                }
                treeNode.setChildren(setChild(treeNode.getId(),rootList));
            }
            return nodeList;
        }
    
    
    
        //返回当前Id的所有子节点
        public List<TreeNode> setChild(String id, List<Qydy> list ){
            List<TreeNode> childList = new ArrayList<>();
            for (Qydy qydy : list) {
                TreeNode treeNode = new TreeNode();
                if (id!=null && id.equals(qydy.getQYDY_PPKID())){
                    treeNode.setId(qydy.getQYDY_PKID());
                    treeNode.setText(qydy.getQYMC());
                    treeNode.setParentId(id);
                    treeNode.setState("close");
                    treeNode.setAttributes(qydy);
                    childList.add(treeNode);
                }
            }
            for (TreeNode department : childList) {
                List<TreeNode> treeNodes = setChild(department.getId(), list);
                if (treeNodes.size()>=1){
                    department.setState("close");
                }
                department.setChildren(treeNodes);
            }
            return childList;
        }
    

    递归重点2,递归方法的返回值问题。改写setChild()方法

        
        public void setChild(TreeNode treeNode, List<Qydy> list ){
            List<TreeNode> childList = new ArrayList<>();
            for (Qydy qydy : list) {
                TreeNode treeNode = new TreeNode();
                if (treeNode.getId()!=null &&treeNode.getId().equals(qydy.getQYDY_PPKID())){
                    treeNode.setId(qydy.getQYDY_PKID());
                    treeNode.setText(qydy.getQYMC());
                    treeNode.setParentId(id);
                    treeNode.setState("close");
                    treeNode.setAttributes(qydy);
                    childList.add(treeNode);
                }
            }
            treeNode.setChildren(childList)
            for (TreeNode department : childList) {
                List<TreeNode> treeNodes = setChild(department, list);
                if (treeNodes.size()>=1){
                    department.setState("close");
                }
                department.setChildren(treeNodes);
            }
        }  
    

      

  • 相关阅读:
    提高php代码效率的几点
    jquery各种操作复选框(全选、全不选、自动勾选、反选……)
    封装PDO单例模式类
    Git常用命令
    简化版的sqlserver分页
    Sql Server 数据分页
    Linux 下动态链接库搜索路径问题
    mysqlperformanceblog
    vim 退格键(backspace)不能用
    Linux vi/vim 编辑命令总结
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14706806.html
Copyright © 2011-2022 走看看