-
-
[旧帖] [原创](申请会员)二叉树旋转后子树高度的变化 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
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期)!
赞赏
赞赏
雪币:
留言: