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