zoukankan      html  css  js  c++  java
  • 简洁常用权限系统的设计与实现(五):不维护节点的深度level,手动计算level,构造树

     这种方式,与第三篇中介绍的类似。
    不同的是,数据库中不存储节点的深度level,增加和修改时,也不用维护。
    而是,在程序中,实时去计算的。

    至于后面的,按照level升序排序,再迭代所有的节点构造树,与第三篇中的方法,完全一样。
    因此,本篇和下一篇,只介绍如何计算level,不再介绍后面的具体实现了。 


    计算level,采用递归方式。

     
    // 计算所有节点的level
    	public static List<Map<String, Object>> caculateLevel(
    			List<Map<String, Object>> list) {
    		//从所有节点中,找出所有的顶级节点
    		List<Map<String, Object>> topLevelList = TreeMenuUtil.findTopLevelNodeList(list);
    		//遍历顶级节点
    		for (Map<String, Object> top : topLevelList) {
    			//顶级节点的level为1
    			level = 1;
    			top.put("level", level);
    			//为每一个顶级节点,构造子结点树
    			child(list, top);
    		}
    		return list;
    	}
    
    	//为当前节点,构造子结点,再构造子结点的子结点
    	private static void child(List<Map<String, Object>> list,
    			Map<String, Object> parent) {
    		//找出一个节点的所有一级子结点
    		List<Map<String, Object>> childList = TreeMenuUtil.findAllChild(parent, list);
    		//遍历子结点
    		for (Map<String, Object> child : childList) {
    			//深度+1
    			level++;
    			child.put("level", level);
    			child(list, child);
    			//回退,深度-1
    			level--;
    		}
    	}
    原文首发:http://fansunion.cn/article/detail/573.html
  • 相关阅读:
    vagrant使用
    商品分类
    猜你喜欢
    [NOIP2012]开车旅行
    bzoj 1029: [JSOI2007]建筑抢修
    bzoj 2127: happiness
    bzoj 2561: 最小生成树
    bzoj 3331: [BeiJing2013]压力
    数组中简便方法求最大值,最小值,平均值,求和,和个数
    #include 和 #import 的区别, @class 的含义
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463015.html
Copyright © 2011-2022 走看看