平衡二叉树上的预订和DFS的时间复杂度是否相同?

时间:2017-06-26 18:12:10

标签: c++ algorithm binary-tree tree-traversal dfs

我从一个答案中读到预订是一种DFS:link

然而,对于平衡二叉树,树遍历的时间复杂度为 O(logn) link,DFS的时间复杂度为 O(N ) link

那么,预订遍历不是一种DFS还是我误解了这个概念?

感谢。

1 个答案:

答案 0 :(得分:2)

二分搜索树的预订,顺序或后序遍历的时间复杂度始终为Θ(n),其中是树中节点的数量。一种看待这种情况的方法是,在每种情况下,每个节点被访问一次并且恰好一次,并且每个边缘被访问两次(一次向下下降,一次向上上升)。

您在问题中提到,在平衡树上遍历树的时间复杂度为O(log n)。这里的O(log n)实际上是指 空间复杂度 (需要多少辅助内存)而不是 时间复杂度 (将执行多少次操作)。这样做的原因是,在它们的典型实现中,所有这些树遍历都需要存储到目前为止已访问过的节点的堆栈,以便遍历可以在必要时在树中更高地备份。这意味着所需的辅助空间与树的高度成正比,在平衡树中,它是O(log n),在任意BST中将是O(n)。

所以从这个意义上说,你问题的最佳答案可能是“DFS,顺序遍历,前序遍历和BST的后序遍历总是花费相同的时间(Θ(n)),并且空间复杂度取决于在树的高度上,其范围可以在Θ(log n)和Θ(n)之间。“