算法----递归
递归的精髓在于某一个方法具体是做什么的!
比如下面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); } }