簡潔常用權(quán)限系統(tǒng)的設(shè)計與實現(xiàn)(六):不維護節(jié)點的深度level,手動計算level,構(gòu)造樹 (把一顆無序的樹,變成有序的)
本篇介紹的方法,參考了網(wǎng)上的代碼。
在遞歸過程中,計算level,是受到了這種方法的啟發(fā)。
CSDN上有篇關(guān)于樹的算法,目標(biāo)是把一個無序的樹,變成有序的。
我看了下代碼,并運行了下,感覺是可行的。
我在想,既然可以把一棵樹完整的遍歷下來,那么應(yīng)該可以知道每個節(jié)點的深度level。嘗試了下,證明可行。
但是,我最終對比本篇的方法,和第5篇中的方法,基本一致。不同的地方是,這篇保存了遍歷的順序,實現(xiàn)了把無序的樹變成有序的。
之所以第5篇和第6篇,分成2篇,是因為我自己原創(chuàng)的和借鑒別人的,還是分開比較好,但是最終“殊途同歸” 。
- // 向新list中裝入根節(jié)點并遞歸子節(jié)點
- 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;
- }
-
- // 遞歸子節(jié)點
- 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;
- }
原文首發(fā):http://fansunion.cn/article/detail/574.html
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。