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

      

  • 相关阅读:
    StringBuffer与StringBuilder的区别比较
    JAVA数据结构--快速排序
    JAVA数据结构--优先队列(堆实现)
    JAVA数据结构--哈希表的实现(分离链接法)
    JAVA数据结构--AVL树的实现
    JAVA数据结构--二叉查找树
    JAVA普通内部类的用法
    关于JAVA泛型中的通配符类型
    JAVA泛型方法与类型限定
    Linux进程间通信的几种方式
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/14706806.html
Copyright © 2011-2022 走看看