假设我有一个完整的二叉树到达某个深度 d 。什么时间复杂度将遍历(预先遍历)这棵树。
我很困惑,因为我知道树中的节点数量是2 ^ d,因此时间复杂度为BigO(2^d)
?因为树正呈指数增长。
但是,在互联网上进行研究后,每个人都表示遍历为BigO(n)
,其中n是元素的数量(在这种情况下为2^d
),而不是BigO(2^d)
,我错过了吗?
谢谢
答案 0 :(得分:2)
n定义为节点数。
2 ^ d只是当该深度的每个可能节点都满时的节点数
即
o
/ \
o o
/ \
o o
当2 ^ d为8时,只有5个节点
完整的二叉树每个节点都填充,除了最后一行,所有节点都填充到左边。你可以在维基百科上找到这个定义
http://en.wikipedia.org/wiki/Binary_tree#Types_of_binary_trees
答案 1 :(得分:0)
即使您可以将时间复杂度表示为O(2 ^ d),这也是无用的,因为它不能用于将其与任何其他集合的时间复杂度进行比较。
另一方面,将时间复杂度表示为O(n)非常有用。它会告诉您当您增加项目数时集合的反应,而无需确切知道集合的实现方式,您可以将其与其他集合的时间复杂度进行比较。