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);
            }
        }  
    

      

  • 相关阅读:
    判断qq浏览器和uc浏览器?
    做前端能避免的错误总结
    css布局
    border-radius后面写px/rem与百分比有什么区别?
    vertical-align
    localstorage和cookie的设置方法和获取方法
    怎么让列表的文字只显示两行,多出的出现省略号?
    avalon在公共页面里面写的功能,怎么让某些页面不引用到这个方法和html?
    小程序
    webpack
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14706806.html
Copyright © 2011-2022 走看看