Update AVL conclusion <AVL.md>, a vivid description is added.

This commit is contained in:
Shine wOng
2019-06-16 21:13:24 +08:00
parent 9f25b126dc
commit f2f921f715

View File

@@ -96,6 +96,8 @@ BinNodePosi(T) AVL<T>::insert(T const &key){
对第一个失衡的结点进行一次旋转调整有可能会导致该结点的祖先结点不一定是父结点失衡。这是因为删除后的一次旋转调整可能会导致调整后的子树根节点高度不变但也有可能高度降低1因此之后的祖先结点也可能接着发生失衡。并且这种失衡至多会发生$O(logn)$次。所以至多需要$O(logn)$次调整。
与AVL的插入相比较插入结点的过程就仿佛是一个好孩子而删除结点的过程仿佛是一个坏孩子。这是因为尽管一次插入可能会导致多至$O(logn)$个结点发生失衡,但是只需要改正第一次错误,后面的错误就不会再犯;而尽管一次删除操作只会有一个结点失衡,将该失衡结点完成调整后,又有可能导致后续同样的错误,所谓知错不改,所以是个坏孩子。
删除后有可能某一子树平衡性不变,但是高度降低。因此必须完全遍历至根节点,没有中途退出循环的途径。因为无法确定上层祖先是否会失衡。
> AVL删除算法。