我认为顺序遍历将在O(n)时间内运行。唯一更好的事情就是在登录时间运行一些东西。但考虑到我们必须至少运行n次,我看不出这是怎么回事。
O(n)是否能在这里做到最新?
答案 0 :(得分:0)
将@ C.B.的评论转换并扩展为答案:
如果你有一个包含n个字符串的AVL树,并且你想要打印所有这些字符串,那么你必须至少完成Θ(n)的总工作,因为你必须打印出n个字符串中的每一个。您通常可以通过计算列表中的项目数量来降低生成列表所需的工作量,或者输出一系列值。
我们在这里可以更精确。假设树中所有字符串的组合长度为L.打印出树中所有字符串所需的时间必须至少为Θ(L),因为输出每个字符需要一些计算工作。因此,我们可以说我们必须至少做Θ(n + L)工作才能打印出树中的所有字符串。
这里给出的界限只是说任何正确的算法至少要做这么多工作,而不是实际上有一个算法可以做这么多工作。但是如果仔细观察任何主要的树遍历 - 按顺序,预订,后序,水平顺序 - 你会发现它们都符合这个时间限制。
现在,您可以寻找节省的一个领域是空间复杂性。如果树完全平衡(因为它在存储器中保存树的整个层并且最底层可以在其中具有Θ(n)节点),则树的级别遍历可能需要Ω(n)总空间。一个inorder,preorder或postorder遍历只需要O(log n)内存,因为你只需要存储当前的访问路径,它在AVL树中具有对数高度。