【问题标题】:What is the time complexity of tree traversal?树遍历的时间复杂度是多少?
【发布时间】:2023-10-18 05:27:01
【问题描述】:

树遍历的时间复杂度是多少,我相信肯定是显而易见的,但我可怜的大脑现在无法计算出来。

【问题讨论】:

  • 编程的线性艺术第 1 卷第 326 页
  • 这是高德纳的计算机编程艺术吗?我试图找到这个给朋友一个很好的例子,对于 n 叉树来说它是线性的。
  • 是 Knuth 的“计算机编程艺术”

标签: tree time-complexity tree-traversal


【解决方案1】:

这取决于您执行的遍历类型和算法,但通常是 O(n),其中 n 是树中节点的总数。深度优先遍历的规范递归实现将按照最深级别的顺序(在堆栈上)消耗内存,在平衡树上它将是 log(n)。

【讨论】:

  • n叉树是这样吗?我有一个数据结构,它是一个最大深度为 4 的树,我的朋友使用 3 个 for 循环来遍历它,并说他的算法在 O(n^3) 时间运行,但我相信它在 n 时间运行,@ 987654323@ 表示树中的节点总数
  • @Nocholas,你是对的,你的朋友是错的。它是 O(n)。
【解决方案2】:

对于具有 n 个节点的树来说,这不就是 n 吗?

您访问每个树叶一次,不是吗?所以我会说它是线性的。

【讨论】:

  • 我猜它应该是具有“n 个节点”而不是“n 个叶子”的树。
  • @Nanne 使用正确的算法,它确实是时间上的线性复杂度(访问每个节点一次),但它可能仍然没有空间上的线性复杂度。就像使用堆栈一样。
  • 但问题是关于时间复杂度的。