java基础-平衡二叉树算法的分解步骤

平衡指的都是一个平衡操作,分别可针对左子树和右子树进行调整,调整完将两端的最顶点
分别连接根节点的左右两端。
当列表数字递增的时候,基本都是发生左旋转。
[0]
    1
      2,左树节点与右树节点相差不等于2,不需要旋转。
[1]
    1
      2
       3  ,左树节点与右树节点相差2,root的后继作为root进行左旋转,左树做平衡,右树做平衡。
 
   2
1     3
 
[2].
     2
1        3
             4  ,左树节点 比右子树个数相差不等于2,左树平衡,右树平衡。
 
[3].
     2
1        3
              4
                  5,左树节点与右树个数相差2,root的后继进行左旋转,
      3
  2     4
1          5,左树平衡,右树平衡。
 
[4].
      3
  2     4
1          5    
              6 ,左树节点与右树个数相差不等于2,不发生旋转,左树平衡,右树平衡。
 
      3
  2      5
1      4   6 ,平衡后的结果。
 
[5].
      3
  2      5
1      4   6 
               7,左树节点与右边个数相差等于2,找到root的后继作为root,相当于发生旋转。
      4
   3    5
 2        6
1            7,左树平衡,右树平衡。
     
         4
   2          6
1    3     5   7,平衡后的结果。
 
[6].
          4
   2          6
1    3     5   7
                    8 ,左树节点与右边个数相差不等于2,不发送旋转。
 
[7].
          4
   2          6
1    3     5   7
                    8 
                       9,左树节点与右边个数相差等于2,找到root的后继5,发生旋转
           5
       4      6
    2           7
 1     3         8
                      9,左树平衡,右树平衡
           5
       4       7
     2      6     8 
   1    3           9,平衡后的结果
 
              5
        3         7
     2   4    6     8 
   1                    9,平衡后的结果
 
[8].
              5
        3         7
     2   4    6     8 
   1                    9,节点数相差不等于2,不发生旋转,两边做平衡处理。
                          10
              5
        3         7
     2   4    6    9 
   1               8    10,平衡后的结果
                       
 
[9].
             5
        3         7
     2   4    6    9 
   1               8    10
                              11 ,节点数相差2,取root的后继。
                6
         5          7
       3                9
    2    4           8   10
   1                          11,两边做平衡处理。
 
               6
         4          7
       3   5             9
    2                   8   10
   1                          11,左边平衡 第一次
 
                6
         4          7
       2   5           9
    1    3          8   10
                              11,左边平衡 第二次
 
                6
         4          8
       2   5     7   9
    1    3               10
                              11,右边平衡 第1次
 
                6
          4            8
       2    5     7    10
    1    3           9    11,右边平衡 第2次
 
[10].
                 6
          4           8
       2    5     7    10
    1    3           9    11
                                12,节点数相差不等于2,不发生旋转。
 
[11].
                 6
          4           8
       2    5     7    10
    1    3           9    11
                                12
                                   13,节点数相差==2,root的后继7作为root  
                 7
            6         8  
         4                 10
       2   5           9      11
    1    3                        12
                                        13, 开始两边的平衡操作。
                  7
            5        8  
         4    6         10
       2             9      11
    1    3                        12
                                        13, 左边平衡 第一次
                  7
            5        8  
         3    6         10
       2   4         9      11
    1                           12
                                        13, 左边平衡 第2次
 
                   7
            5          9  
         3    6    8     10
       2   4                 11
    1                           12
                                        13, 右边平衡 第1次
 
                   7
            5          9  
         3    6    8     11
       2   4           10   12
    1                               13, 右边平衡 第2次
 
找出其中的规律,左右子树节点数相差是否等于2,等于2就发生旋转,然后分别对左右子树做平衡操作。
接下来就是使用代码实现的问题了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值