本篇介绍的方法,参考了网上的代码。 在递归过程中,计算level,是受到了这种方法的启发。 CSDN上有篇关于树的算法,目标是把一个无序的树,变成有序的。 我看了下代码,并运行了下,感觉是可行的。 我在想,既然可以把一棵树完整的遍历下来,那么应该可以知道每个节点的深度level。尝试了下,证明可行。 但是,我最终对比本篇的方法,和第5篇中的方法,基本一致。不同的地方是,这篇保存了遍历的顺序,实现了把无序的树变成有序的。 之所以第5篇和第6篇,分成2篇,是因为我自己原创的和借鉴别人的,还是分开比较好,但是最终“殊途同归” 。
// 向新list中装入根节点并递归子节点 public static ListtraverseRootNode(List treeList) { List 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 sortNode(TreeNode rootNode, List treeList) { List 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