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
  • 相关阅读:
    《算法导论》读书笔记(五)
    《算法导论》读书笔记(四)
    《算法导论》读书笔记(三)
    《算法导论》读书笔记(二)
    《算法导论》读书笔记(一)
    Posix消息队列
    管道和FIFO
    linux内核数据结构之kfifo
    linux内核数据结构之链表
    Mybatis XML 映射配置文件 -- 熟悉配置
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463015.html
Copyright © 2011-2022 走看看