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

     本篇介绍的方法,参考了网上的代码。
    在递归过程中,计算level,是受到了这种方法的启发。

     CSDN上有篇关于树的算法,目标是把一个无序的树,变成有序的。

     我看了下代码,并运行了下,感觉是可行的。 

    我在想,既然可以把一棵树完整的遍历下来,那么应该可以知道每个节点的深度level。尝试了下,证明可行。

    但是,我最终对比本篇的方法,和第5篇中的方法,基本一致。不同的地方是,这篇保存了遍历的顺序,实现了把无序的树变成有序的。

    之所以第5篇和第6篇,分成2篇,是因为我自己原创的和借鉴别人的,还是分开比较好,但是最终“殊途同归” 。

     // 向新list中装入根节点并递归子节点
    	public static List<TreeNode> traverseRootNode(List<TreeNode> treeList) {
    		List<TreeNode> rootNode = TreeMenuUtil.findTopLevelList(treeList);
    		for (int i = 0; i < rootNode.size(); i++) {
    			level = 1;
    			TreeNode root = rootNode.get(i);
    			root.level = level;
    			newList.add(root);
    			sortNode(root, treeList);
    		}
    		return newList;
    	}
    
    	// 递归子节点
    	private static List<TreeNode> sortNode(TreeNode rootNode,
    			List<TreeNode> treeList) {
    		List<TreeNode> childList = TreeMenuUtil
    				.findAllChild(rootNode, treeList);
    		level++;
    		if (childList != null) {
    			int size = childList.size();
    			for (int i = 0; i < size; i++) {
    				TreeNode treeNode = childList.get(i);
    				newList.add(treeNode);
    				treeNode.level = level;
    				sortNode(treeNode, treeList);
    			}
    		}
    		level--;
    		return childList;
    	}

    原文首发:http://fansunion.cn/article/detail/574.html
  • 相关阅读:
    深拷贝的终极探索(90%的人都不知道)
    VS Code:让你工作效率翻倍的23个插件和23个编辑技巧
    Git使用教程:最详细、最傻瓜、最浅显、真正手把手教!
    【译】使用 ndb 调试 node 应用
    nodejs的express使用介绍
    Koa 框架教程
    VSCode配置Git随记
    单页面路由原理及实现
    可能比文档还详细--VueRouter完全指北
    急速JavaScript全栈教程
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463012.html
Copyright © 2011-2022 走看看