递归
来源:互联网 发布:php个人博客网站模板 编辑:程序博客网 时间:2024/06/05 00:44
java 递归在部门树结构实际使用
在后台管理的时候会遇到要使用部门树结构 所以一般都是使用递归来完成
首要条件部门表的设计基于parentId来确定部门和部门之间的从属关系
orgId为 1504084286838 的parentId为空表示根节点
如果我们查询的是1504084286838的所有节点那么结构如下
|–1504084286838
|--1504160376031 |--1504160386037 |--1509083214761
都是其子节点,其中1504160376031和1509083214761是其直属子节点
一、递归部门以及所有子部门的部门id
/***递归所有子部门id*/public List<String> getOrgs(String orgId){ List<Org> orgs= orgDao.findAll();//获取所有部门 List<String> children= new ArrayList<>(); List<String> listIds = recurOrgIds(orgId,orgs,children); listIds.add(orgId ); return listIds }public List<String> recurOrgIds(String orgId,List<Org> orgs,List<String> children){ for (Org org : orgs){ if (orgId.equals(org.getParentId())){ children= recurOrgIds(org.orgId(),orgs,children); children.add(org.getCategoryId()); } } return children; }
二、下面将递归部门以及所有下级部门的部门信息(以json格式返回数据)
public String getOrgTree(){ List<Org> orgs= orgDao.findAll(); //获取所有部门 Org rootOrg = orgDao.getRootOrg();//获取根部门 String rootId = rootOrg.getId();//获取根部门id //将根节点转换为json字符串 JSONObject jsonObject = JSONObject.fromObject(category); //递归获子节点 String children = getChildren(list, category.getCategoryId()); jsonObject.put("children", children); JSONArray jsonArray = JSONArray.fromObject(obj); return jsonArray.toString();}public String getChildren(List<Org> list, String rootId) throws Exception { List<Object> result = new ArrayList<>(); for (rgOrg org: list) { JSONObject jsonObject = JSONObject.fromObject(orgorg); //将子节点信息转换为json格式的字符串 if (org.getParentId().equals(rootId)) { String children = getChildren(list, org.getOrgId());//递归 jsonObject.put("children", children); result.add(jsonObject); } } JSONArray jsonArray = JSONArray.fromObject(result); return jsonArray.toString(); }
三、如果部门不是一棵树的形而是多棵树的形式
/***其实就是第二部的单棵树做了一个for循环String children = getChildren(list, org.getOrgId());//递归*/ public String getTrees() { try { List<Org> orgs= orgDao.findAll(); //获取所有部门 List<Org> roots = new ArrayList<>(); //找到所有根节点(parentId为空的分类) List<Org> list = new ArrayList<>();//除了根节点的所有节点 List<Object> trees = new ArrayList<>(); for (Org org : orgs) { if ("".equals(org.getParentId()) || null == org.getParentId()) { roots.add(org); } else { list.add(org); } } for (Org org : roots) { JSONObject jsonObject = JSONObject.fromObject(org);//将根节点转换为json字符串 String children = getChildren(list, org.getCategoryId()); //递归获子节点 jsonObject.put("children", children); trees.add(jsonObject); } JSONArray jsonArray = JSONArray.fromObject(trees); return jsonArray.toString(); } catch (Exception e) { e.printStackTrace(); return JsonUtil.returnStr(JsonUtil.FAIL, "获取分类树失败"); } }
阅读全文
0 0
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 递归
- 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。
- 阿里云ECS服务器Linux环境下配置php运行环境(安装配置篇)
- PHP+MYSQL中使用PDO中执行SQL语句
- HighCharts入门教程
- 聚合支付态度支付,满足各类支付场景需求
- 递归
- PHP+MYSQL中使用PDO获取结果集的fetch方法
- imageload封装类
- PHP+MYSQL中使用PDO的query方法
- eclipse 工程感叹号处理
- 4.Python入门之元组,字符串
- PHP+MYSQL中使用PDO获取结果集的fetchAll方法
- ros机器人问题总结篇(1)
- LeetCode||65. Valid Number