现在的位置: 首页 > 综合 > 正文

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

2016年07月19日 ⁄ 综合 ⁄ 共 967字 ⁄ 字号 评论关闭
 本篇介绍的方法,参考了网上的代码。
在递归过程中,计算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

抱歉!评论已关闭.