平衡不平衡/部分平衡BST的复杂性?

时间:2013-11-01 15:12:16

标签: data-structures big-o binary-search-tree time-complexity avl-tree

在AVL树中,每次我们在插入和删除时重新平衡时,它都需要恒定数量的单次和双次旋转,因为我们只需检查从插入点或删除到根的路径。

如果我们有一个不平衡的树,我们必须检查每个可能的节点是否是平衡的,因此重新平衡不平衡树需要花费O(n)。这是对的吗?

1 个答案:

答案 0 :(得分:4)

花费时间O(n)来重新组合不平衡的树,但不是因为你提到的原因。在AVL树中,如果树在插入元素之前最大程度地不平衡,则插入和删除可能需要Θ(log n)旋转。这可能需要O(n log n)时间来重新平衡树,因为您可以为每个n个节点执行O(log n)工作。

但是,使用其他算法,您可以在O(n)时间内重新平衡树。一个简单的选择是对树进行顺序遍历以按排序顺序获取元素,然后通过递归地自下而上构建树来从这些元素重建最佳BST。或者,您可以使用Day-Stout-Warren algorithm来平衡O(n)时间和O(1)空间中的任何树。

希望这有帮助!