對于平衡二叉樹的操作應對與考試只需要模擬出過程即可,且他的過程和插入的平衡方法一樣,不一樣的只是對于平衡因子的計算上。接下來我將給出方法
①刪除結點(方法同“二叉排序樹”)
②一路向北找到最小不平衡子樹,找不到就完結撒花
③找最小不平衡子樹下,“個頭”最高的兒子、孫子
④根據孫子的位置,調整平衡(LL/RR/LR/RL)
⑤如果不平衡向上傳導,繼續②
具體的講解看接下來幾個例子
平衡二叉樹的刪除操作具體步驟:
①刪除結點(方法同“二叉排序樹”)
? 若刪除的結點是葉子,直接刪。
? 若刪除的結點只有一個子樹,用子樹頂替刪除位置
? 若刪除的結點有兩棵子樹,用前驅(或后繼)結點
頂替,并轉換為對前驅(或后繼)結點的刪除。
②一路向北找到最小不平衡子樹,找不到就完結撒花
③找最小不平衡子樹下,“個頭”最高的兒子、孫子
④根據孫子的位置,調整平衡(LL/RR/LR/RL)
⑤如果不平衡向上傳導,繼續②
例一
這里可以看到刪除9的話平很行不會被破壞,此時就只需要直接刪除9就好了。
例二
①刪除結點(方法同“二叉排序樹”)
? 若刪除的結點是葉子,直接刪。
? 若刪除的結點只有一個子樹,用子樹頂替刪除位置
? 若刪除的結點有兩棵子樹,用前驅(或后繼)結點
頂替,并轉換為對前驅(或后繼)結點的刪除。
②一路向北找到最小不平衡子樹,找不到就完結撒花
③找最小不平衡子樹下,“個頭”最高的兒子、孫子
④根據孫子的位置,調整平衡(LL/RR/LR/RL)
⑤如果不平衡向上傳導,繼續②
可以看出刪除55以后平衡因子被破壞掉了
找最高的兒子和孫子找出他們的相對位置,像這里就是RR
接著就采用插入對于RR的處理方法就好
例三
不平衡了
找最高的兒子和孫子
RL型的處理方法
例四
紅框的位置就是例三
第一次處理過后
顯然還是不平衡的
⑤如果不平衡向上傳導,繼續②
? 對最小不平衡子樹的旋轉可能導致樹變矮,從而導
致上層祖先不平衡(不平衡向上傳遞)
例五
①刪除結點(方法同“二叉排序樹”)
? 若刪除的結點是葉子,直接刪。
? 若刪除的結點只有一個子樹,用子樹頂替刪除位置
? 若刪除的結點有兩棵子樹,用前驅(或后繼)結點
頂替,并轉換為對前驅(或后繼)結點的刪除。
先看采取前驅的操作
例6