AVL树平衡的定义
下图中,之所以右图的二叉树不是AVL树,是因为在节点7处,其左子树高度为2,右子树高度却为0,所以不平衡。
AVL树不平衡场景
总共不平衡由以下几种情景造成:
- 边界情景一:研究节点的左儿子的左子树破坏了平衡——>左子树单旋转
- 边界情景二:研究节点的右儿子的右子树破坏了平衡——>右子树单旋转
- 内部情景一:研究节点的左儿子的右子树破坏了平衡——>LR双旋转
- 内部情景二:研究节点的右儿子的左子树破坏了平衡——>RL双旋转
其实就是数据插在何处,导致了左右子树的高度超过1的意思。
单旋转
如下图,当插入6时,造成8节点不平衡,左子树高度比右子树高度多2。为恢复平衡,以8节点的左儿子7为轴进行旋转得到右图,平衡完成。(最右边图作为总结,k2即为研究节点,虚线表示层,k2的左儿子k1的左子树X比k2的右儿子Z深2层)
双旋转
如下图,没插入15之前,7节点左子树为空,右子树就1层,满足平衡。插入15后,7节点左子树依然为空,右子树变成两层,平衡被打破。这种打破平衡对应内部情景二,采用RL双旋转进行平衡。具体来说&#