【问题标题】:Are time complexity of pre-order and DFS on a balanced binary tree same?平衡二叉树上的前序和 DFS 的时间复杂度是否相同?
【发布时间】:2017-06-26 18:12:10
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

  • 定义“遍历”,搜索不需要访问所有节点,DFS可以
  • 通过遍历,我的意思是打印树的所有节点,我知道每个节点都被访问过,所以应该是O(N),但是,为什么要用O(logn)呢?

标签: c++ algorithm binary-tree depth-first-search tree-traversal


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 2013-03-02
    相关资源
    最近更新 更多