在AVL树中,每次我们在插入和删除时重新平衡时,它都需要恒定数量的单次和双次旋转,因为我们只需检查从插入点或删除到根的路径。
如果我们有一个不平衡的树,我们必须检查每个可能的节点是否是平衡的,因此重新平衡不平衡树需要花费O(n)
。这是对的吗?
答案 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)空间中的任何树。
希望这有帮助!