前言
我们知道在二叉平衡(AVL)树中是存在平衡因子的,平衡因子的作用是判断AVL树是否平衡,当AVL树不平衡时,我们就需要通过旋转使其重回平衡。
一、旋转的分类
1.LL失衡
所谓的LL平衡旋转是指,新插入的节点N使AVL树失去平衡,且最先失去平衡的节点为P。当N是在P的左节点的左子树上时,需要通过LL平衡旋转使AVL树重回平衡。如下图:
2.RR失衡
所谓的LL平衡旋转是指,新插入的节点N使AVL树失去平衡,且最先失去平衡的节点为P。当N是在P的右节点的右子树上时,需要通过LL平衡旋转使AVL树重回平衡。如下图:
3.LR失衡
所谓的LL平衡旋转是指,新插入的节点N使AVL树失去平衡,且最先失去平衡的节点为P。当N是在P的左节点的右子树上时,需要通过LL平衡旋转使AVL树重回平衡。如下图:
4.RL失衡
所谓的LL平衡旋转是指,新插入的节点N使AVL树失去平衡,且最先失去平衡的节点为P。当N是在P的右节点的左子树上时,需要通过LL平衡旋转使AVL树重回平衡。如下图:
二、实现LL平衡旋转
三、实现RR平衡旋转
四、实现LR平衡旋转
第一步:通过“左旋转”,将"LR"转换成“LL”
第二步:通过“右旋转”,将“LL”转换成“平衡树”
注意:我们可以发现,在实现LR的平衡时,我们用到了LL,和RR,所以在真是的代码中,我们只需要写LL和RR的逻辑代码,对于RL和LR而言,只需要调用RR和LL即可。
五、实现RL平衡旋转
第一步:通过“右旋转”,将"RL"转换成“RR”
第二步:通过“左旋转”,将“RR”转换成“平衡树”
注意:我们可以发现,在实现LR的平衡时,我们用到了LL,和RR,所以在真是的代码中,我们只需要写LL和RR的逻辑代码,对于RL和LR而言,只需要调用RR和LL即可。