树遍历的时间复杂度是多少?
Posted
技术标签:
【中文标题】树遍历的时间复杂度是多少?【英文标题】:What is the time complexity of tree traversal? 【发布时间】:2011-02-10 11:13:14 【问题描述】:树遍历的时间复杂度是多少,我相信肯定是显而易见的,但我可怜的大脑现在无法计算出来。
【问题讨论】:
编程的线性艺术第 1 卷第 326 页 这是高德纳的计算机编程艺术吗?我试图找到这个给朋友一个很好的例子,对于 n 叉树来说它是线性的。 是 Knuth 的“计算机编程艺术” 【参考方案1】:这取决于您执行的遍历类型和算法,但通常是 O(n),其中 n 是树中节点的总数。深度优先遍历的规范递归实现将按照最深级别的顺序(在堆栈上)消耗内存,在平衡树上它将是 log(n)。
【讨论】:
n叉树是这样吗?我有一个数据结构,它是一个最大深度为 4 的树,我的朋友使用 3 个 for 循环来遍历它,并说他的算法在O(n^3)
时间运行,但我相信它在 n
时间运行,@ 987654323@ 表示树中的节点总数
@Nocholas,你是对的,你的朋友是错的。它是 O(n)。【参考方案2】:
对于具有 n 个节点的树来说,这不就是 n 吗?
您访问每个树叶一次,不是吗?所以我会说它是线性的。
【讨论】:
我猜它应该是具有“n 个节点”而不是“n 个叶子”的树。 @Nanne 使用正确的算法,它确实是时间上的线性复杂度(访问每个节点一次),但它可能仍然没有空间上的线性复杂度。就像使用堆栈一样。 但问题是关于时间复杂度的。以上是关于树遍历的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章