算法----递归

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

比如下面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);
        }
    }  

  

 

posted @ 2021-04-26 22:18  小名的同学  阅读(44)  评论(0编辑  收藏  举报