(礼拜三log)递归树算法2
2016-05-23 09:06
381 查看
为ztree数据设计的后台java逻辑生成树:
递归参数包括了父级节点的id,可以使递归算法得到简化。
另外还有一个类似的递归算法:比较简化,可以提供思路:
递归参数包括了父级节点的id,可以使递归算法得到简化。
/** * 组织机构(树) */ public JSONArray tree(String id, Integer topLevel, Integer open, String url) { JSONArray tree = new JSONArray(); JSONArray orgs = find(); String top_id = "0"; if (topLevel != null && topLevel.equals(1)) { JSONObject top = new JSONObject(); top.put("id", top_id); top.put("name", "顶级机构"); top.put("iconSkin", "tollstation"); if (!StringUtil.isEmpty(url)) { top.put("id", top_id + "_organizationId"); top.put("url", url + "&organizationId=" + top_id); top.put("target", "_self"); } JSONArray top_children = new JSONArray(); recursion_tree(top_children, orgs, id, top_id, open, url); if (top_children.size() > 0) { if (open != null && open.equals(1)) top.put("open", true); top.put("children", top_children); } tree.add(top); } else recursion_tree(tree, orgs, id, top_id, open, url); return tree; } /** * 组织机构递归(树) */ private void recursion_tree(JSONArray tree, JSONArray orgs, String id, Object parentId, Integer open, String url) { for (Object org_obj : orgs) { JSONObject org = (JSONObject) org_obj; if (org.get("parentOrganizationId").equals(parentId) && (StringUtil.isEmpty(id) || !id.equals(org.get("organizationId")))) { JSONObject org_row = new JSONObject(); org_row.put("id", org.get("organizationId")); org_row.put("name", org.get("organizationName")); org_row.put("iconSkin", "tollstation"); if (!StringUtil.isEmpty(url)) { org_row.put("id", org.get("organizationId") + "_organizationId"); org_row.put("url", url + "&organizationId=" + org.get("organizationId")); org_row.put("target", "_self"); } JSONArray org_children = new JSONArray(); recursion_tree(org_children, orgs, id, org.get("organizationId"), open, url); if (org_children.size() > 0) { if (open != null && open.equals(1)) org_row.put("open", true); org_row.put("children", org_children); } tree.add(org_row); } } }
另外还有一个类似的递归算法:比较简化,可以提供思路:
/** * 组织机构(表树) */ public JSONArray findTable(Integer topLevel, JSONObject entity) { JSONArray list = new JSONArray(); JSONArray orgs = find(entity); recursion_table(list, orgs, "0"); return list; } /** * 组织机构递归(表树) */ public void recursion_table(JSONArray list, JSONArray orgs, Object parentId) { for (Object org_obj : orgs) { JSONObject org = (JSONObject) org_obj; if (org.get("parentOrganizationId").equals(parentId)) { list.add(org); recursion_table(list, orgs, org.get("organizationId")); } } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树