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