首页
社区
课程
招聘
[旧帖] [原创](申请会员)二叉树旋转后子树高度的变化 0.00雪花
发表于: 2011-3-22 00:18 839

[旧帖] [原创](申请会员)二叉树旋转后子树高度的变化 0.00雪花

2011-3-22 00:18
839
G                                   G
                         K1                            K2
              K2               C              A                K1
          A       B                                          B          C

注:T1 T2为已知量

HA表示A子树的高度
HB表示B子树的高度
HC表示C子树的高度
K1的高度差  =  T1
K2的高度差  =  T2

T1 = (max(HA,HB)+1) -  HC
T2 = HA - HB
--------------------------------------------
T1New = HB - HC
T2New = HA - (max(HB,HC) +1)

旋转前树高
max(  max(HA,HB)  + 1 ,HC ) +1

旋转后树高
max(  HA,  max(HB,HC) +1 )  + 1

旋转后树高-旋转前树高 =

max(  HA,  max(HB,HC) +1 )  - max(  max(HA,HB)  + 1 ,HC )

max(  HA,  max(HB,HC) +1 )  - max( T1 + HC ,HC )

max(  HA,  HA - T2New  )  - max( T1 + HC ,HC )

因为 HA = T2 + T1New+HC

max(  (T2 + T1New+HC),  T2 + T1New+HC - T2New  )
-
max( T1 + HC ,HC )

HC会被抵消,和HC没关系

旋转后k1 和k2的变化

  G                                   G
                         K1                            K2
              K2               C              A                K1
          A       B                                          B          C

HA表示A子树的高度
HB表示B子树的高度
HC表示C子树的高度
K1的高度差  =  T1
K2的高度差  =  T2

T1 = (max(HA,HB)+1) -  HC
T2 = HA - HB
--------------------------------------------
T1New = HB - HC
T2New = HA - (max(HB,HC) +1)
--------------------------------------------

T1New - T1 = HB - HC - ( (max(HA,HB)+1) -  HC)
                   = HB - HC - (max(HA,HB)+1) + HC
                   = HB - (max(HA,HB)+1)
                   = HB - (  max(T2 + HB,HB)   +1     )

if T2 > 0 then     T1New = T1  - T2 -1
if T2 <= 0 then   T1New = T1  - 1

T2New - T2  =  HA - (max(HB,HC) +1) - (HA - HB)
                    =  HB - max(HB,HC) - 1
                    =  HB - max(HB,HB - T1New ) - 1
  
if T1New > 0 then      T2New = T2  - 1
if T1New <= 0 then    T2New = T2 + T1New - 1

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册