是否在深度优先搜索的二叉树上进行预先排序?

时间:2014-02-05 08:08:29

标签: algorithm tree binary-tree depth-first-search preorder

在我看来,预处理遍历和DFS与我们以深度方式遍历叶节点的两种情况相同。如果我错了,有人可以纠正我吗?

提前致谢!

4 个答案:

答案 0 :(得分:47)

预订是一种DFS。

深度优先遍历有三种类型:预订,有序和后期订单。

查看here了解详情。

答案 1 :(得分:5)

这可能取决于深度优先的定义和实现 算法。 Java Swing的JTree的DefaultMutableTreeNode类 component具有以下用于树遍历的枚举方法:

  • depthFirstEnumeration()
  • postorderEnumeration()
  • preorderEnumeration()
  • breadthFirstEnumeration()

在Java Swing的实现中,depthFirstEnumeration是相同的 作为postOrderEnumeration。我的测试和official documentation 证实了这一点。

其他人可以定义深度优先的含义。例如,一篇文章 在Wikipedia上,预订和后序遍历是特定类型 深度优先遍历。这意味着深度优先遍历 不是具体的遍历算法。

答案 2 :(得分:5)

不会。预订有严格的方式访问Left节点,然后访问Right节点。但对于DFS来说,它可以是没有严格的时尚。因此,根据您在堆栈上推送的内容,存在多个遍历。

答案 3 :(得分:1)

直觉上,由于我们在大多数实现中使用递归应用DFS算法(即使用隐式堆栈数据结构)的方式,它们的感觉相同。在大多数情况下(或所有情况下),结果与“遍历遍历”相同。

DFS的想法是选择一个分支并深入研究,对其进行全面探索。鉴于选择分支的方式和关闭方式取决于您要实现的 DFS类型。为了完整起见,在 BFS算法中,我们逐级遍历

请记住,预购只是一种DFS 。我们还有其他方法,如下所示。

notes on dfs

图片来源:Base CS

为更好地理解,请参考this blog或什至this one