树遍历的时间复杂度是多少?

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 使用正确的算法,它确实是时间上的线性复杂度(访问每个节点一次),但它可能仍然没有空间上的线性复杂度。就像使用堆栈一样。 但问题是关于时间复杂度的。

以上是关于树遍历的时间复杂度是多少?的主要内容,如果未能解决你的问题,请参考以下文章

二叉搜索树和最优二叉搜索树的时间复杂度各是多少?

题目3. 平衡二叉树算法查找树中某节点的时间复杂度是多少?

基数树的空间复杂度是多少?

FP-Growth 算法的时间和空间复杂度是多少?

二叉树遍历的最优解法

比较两棵 Merkle 树的时间复杂度是多少?