數(shù)據(jù)結(jié)構(gòu)之AVL樹(自平衡二叉樹)

為什么需要AVL樹?

二叉搜索樹專題講過二叉搜索樹一定程度上可以提高搜索效率,但是當(dāng)原序列有序時(shí),依據(jù)此序列構(gòu)造的二叉搜索樹為右斜樹或者左斜樹,同時(shí)二叉樹退化成單鏈表,搜索效率降低為 O(n)。
例如假設(shè)有一組數(shù)[1, 2, 3, 4, 5, 6]如果我們以順序添加到二叉搜索樹中, 那么這顆二叉搜索樹就會(huì)退化成一個(gè)鏈表。

二叉搜索樹的查找效率取決于樹的高度,因此保持樹的高度最小,即可保證樹的查找效率。因此就有了AVL樹。
AVL樹也算是一種特殊的兒二叉搜索樹,這里不講AVL樹的搜索與查找,因?yàn)槎急容^簡單,主要講的是AVL樹的插入與刪除,因?yàn)樾薷目赡軙?huì)導(dǎo)致重新平衡。

定義

它或者是一棵空樹,或者是具有下列性質(zhì)的二叉樹:它的左子樹和右子樹都是平衡二叉樹,且左子樹和右子樹的高度之差之差的絕對值不超過1。AVL樹是最早被發(fā)明的自平衡二叉查找樹。在AVL樹中,任一節(jié)點(diǎn)對應(yīng)的兩棵子樹的最大高度差為1,因此它也被稱為高度平衡樹

4的左子樹高度是0,右子樹高度是0,高度差0
5的左子樹高度1,右子樹高度0,高度差1
8的左子樹高度2,右子樹高度1,高度差1
12的左子樹高度3,右子樹高度2,高度差1
18的左子樹高度1,右子樹高度0,高度差1

平衡因子

某節(jié)點(diǎn)的左子樹與右子樹的高度(深度)差即為該節(jié)點(diǎn)的平衡因子(BF,Balance Factor),平衡二叉樹中不存在平衡因子大于 1 的節(jié)點(diǎn)。在一棵平衡二叉樹中,節(jié)點(diǎn)的平衡因子只能取 0 、1 或者 -1 ,分別對應(yīng)著左右子樹等高,左子樹比較高,右子樹比較高。當(dāng)平衡因子的絕對值大于 1 時(shí),就會(huì)觸發(fā)樹的重新平衡。

插入與刪除

刪除操作與二叉搜索樹一樣,只不過刪除一個(gè)節(jié)點(diǎn)需要檢查樹是否平衡,如果平衡因子絕對值大于 1 時(shí),就需要重新平衡,若平衡二叉樹種某個(gè)結(jié)點(diǎn)的左子樹和右子樹的高度相差大于1,該樹就是失衡了,該結(jié)點(diǎn)稱為失衡點(diǎn),先找到失衡點(diǎn),接下來的操作就和插入時(shí)需要平衡一樣了,所以這里只需要講失衡點(diǎn)是怎么平衡的就可以。
會(huì)有四種情況導(dǎo)致失衡:

  • LL型
    當(dāng)新插入的結(jié)點(diǎn)為左子樹的左子結(jié)點(diǎn)時(shí),我們需要進(jìn)行右旋操作來保證此部分子樹繼續(xù)處于平衡狀態(tài)。


下面看一個(gè)比較復(fù)雜的情況:插入一個(gè)節(jié)點(diǎn)20


  • RR型
    當(dāng)新插入的結(jié)點(diǎn)為右子樹的右子結(jié)點(diǎn)時(shí),我們需要進(jìn)行左旋操作來保證此部分子樹繼續(xù)處于平衡狀態(tài)。


  • LR型
    對于LR型的情況,要使用先對失衡點(diǎn)的左孩子進(jìn)行左旋,然后再對失衡點(diǎn)進(jìn)行右旋來解決。


復(fù)雜情況:


  • RL型
    對于RL型的情況,要使用先對失衡點(diǎn)的右孩子進(jìn)行右旋,然后再對失衡點(diǎn)進(jìn)行左旋來解決。



    復(fù)雜情況:


總結(jié):
AVL是歷史上出現(xiàn)的第一種平衡二叉樹,它現(xiàn)在的很多應(yīng)用都已經(jīng)被紅黑樹代替。主要原因是它的平衡限制比較紅黑樹嚴(yán)格,在插入或者刪除節(jié)點(diǎn)的時(shí)候很容易違反平衡限制條件,造成頻繁的樹結(jié)構(gòu)調(diào)整和重新平衡。AVL限制對每個(gè)節(jié)點(diǎn)左子樹和右子樹的高度相差不超過一,所以它是高度平衡的二叉樹,因而在進(jìn)行查找的時(shí)候效率很高。而紅黑樹的平衡限制比AVL要弱,甚至左右子樹的高度差等于2倍,所以紅黑樹的查找效率比AVL要低。但是,紅黑樹不需要頻繁重平衡(得益于其寬松的限制條件),所以在插入刪除較頻繁的環(huán)境中紅黑樹勝出。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容