1.2 KiB
1.2 KiB
Conclusion on AVL
AVL
什么是平衡树?理想平衡与适度平衡?
为什么AVL树是平衡树? 平衡因子 -> 整体的平衡
AVL 插入
- 插入至多会导致$O(logn)$个结点失衡,全是当前结点的祖先。第一个失衡的结点,至少是新插入结点的祖父结点
- 经过一次旋转调整后,可以使第一个失衡的结点恢复平衡,同时它的祖先也全部恢复平衡,全树重新平衡
- 插入后有可能平衡性不变,但是高度发生改变
AVL 删除
- 删除至多只会导致一个结点失衡。这个结点可以是被删除结点的父结点
- 经过一次旋转调整后,当前局部会重新恢复平衡,但是其高度可能发生变化,也可能不变
- 因此之后的祖先结点也可能接着发生失衡。并且这种失衡至多会发生$O(logn)$次。因此至多需要$O(logn)$次调整
- 删除后有可能某一子树平衡性不变,但是高度降低
- 必须完全遍历至根节点,没有中途退出循环的途径。因为无法确定上层祖先是否会失衡。
3+4重构
- 可以证明,经过3+4重构后得到的子树,仍然是满足AVL平衡条件
- 对应了之前的单旋转和双旋转所有的情况