自平衡方式--旋转
关键字:旋转、支点、不平衡起始点、碰撞
前言:
判断分支:不平衡起始点到插入节点所在的这条路径。分类:LL型、LR型、RR型、RL型等
不平衡起始点:从插入节点开始,沿着到根节点的路径往上找第一个平衡因子大于1的节点,这个节点就称为不平衡起始点。也是判断分支的起点
支点:指判断分支的起点,也指旋转的支点。
1、定义:平衡二叉树在失去平衡之后重新进行调整的一种方式。
2、实现方式:左旋、右旋
(1)左旋:
- 当前节点往逆时针方向下移一位;
- 右孩子上移一位;
(己逆下,右子上)
(2)右旋:
- 当前节点往顺时针方向下移一位;
- 左孩子上移一位;
(己顺下,左子上)
3、判断分支的分类:
(1)判断标准:找到不平衡起始点,以其作为支点来判断是属于LL、LR、RL、RR中的哪一种。
(2)判断分支的分类以及解决方案:
①LL型:采用右旋方式解决;
②RR型:采用左旋方式解决;
③LR型:
a、取支点的下一个节点作为支点,然后进行左旋。此时可得到LL型。
b、此时再以原来的不平衡起始点作为支点,进行右旋。
④RL型:
a、取支点的下一个节点作为支点,然后进行右旋。此时可得到RR型。
b、此时再以原来的不平衡起始点作为支点,进行左旋。
4、进行旋转操作时的注意事项:
(1)碰撞:在进行旋转的时候,会提出碰撞这样一个概念.
碰撞:旋转过程中出现,一个节点往下移;另外一个节点同时往上移,导致两个节点产生冲突的情况。
例如:下图中第一张图当中,在对2节点进行左旋时,2往下,6往上,此时两者会发生碰撞。此时就需要解决冲突。解决:6变成2的右子即可
注意:
在(支点)右边碰撞,在下层的变成在上层的左子;
在(支点)左边碰撞,在下层的变成在上层的右子。
(右边和左边指的是在支点的左边,还是在支点的右边;下层和上层指的是在两个节点碰撞时,谁在上层,谁在下层)
(2)进行旋转时,不要移动支点以上的节点,支点以上的所有节点保持不变,只能旋转支点以下的节点。
5、例题分析:
附注:以上内容如觉不妥,欢迎交流。