AVL树自平衡的四种状况
本文主要介绍AVL树的四种旋转情况,在阅读本文章前,请自行学习AVL树的不平衡状态,也就是如何去找到不平衡的结点(离新插入结点最近的不平衡结点)
1. 左左
AVL树的左左情况指的是新插入结点 在不平衡结点(Root)的左子结点(LeftNode),并且还是在该左子节点(LeftNode)的左边。
这种情况需要右旋转。
插入前状态:
插入结点16,可知,16就是17的左子结点:
但此时不满足平衡条件(结点18不满足),需要右旋
右旋是指,以不平衡结点为支点(Root),把Root的左孩子结点放在Root结点上,Root结点为LeftNode的右孩子。
2.右右
AVL树的左左情况指的是新插入结点在不平衡结点(Root)的右子结点(RightNode),并且还是在该右子节点(RightNode)的右边。
这种情况需要左旋。
旋转前结点如下:
插入27结点时,
此时25结点不满足平衡特性,需要左旋。
左右
当插入一个结点,根据结点往上找,有个结点(Root)不满足平衡要求,并且这个新插入的结点在这个结点(Root)的左孩子的右孩子,这时就要进行双旋转先左旋,再右旋。
首先25和28符合(右右情况)左旋,变为
再进行右旋,因为这是符合左左情况的,最后结果变为
右左
当插入一个结点为不平衡结点的右左结点时,也是双旋转。
首先60和57先右旋,
这时候再左旋(以50为旋转轴)