自平衡方式--旋转

关键字:旋转、支点、不平衡起始点、碰撞
前言:
  判断分支
:不平衡起始点到插入节点所在的这条路径。分类: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、例题分析:


 

 

posted @ 2019-08-16 15:19  数据是宝  阅读(473)  评论(0编辑  收藏  举报