12-平衡二叉樹

平衡二叉樹

平衡二叉樹就是對二叉查找樹的優(yōu)化升級秘车,它要求每個(gè)節(jié)點(diǎn)的左右子樹的高度相差不大于1

1.平衡二叉樹的查找

平衡二叉樹和二叉排序樹的查找是一摸一樣的。

2.平衡二叉樹的順序輸出

平衡二叉樹的中序遍歷和二叉排序樹一樣桅锄,都是可以輸出一個(gè)有序的數(shù)列琉雳。

3.平衡二叉樹的插入

平衡二叉樹在插入數(shù)據(jù)時(shí),當(dāng)發(fā)生了高度的不平衡時(shí)友瘤,會采取4種旋轉(zhuǎn)操作:LL,RR,LR,RL(左左翠肘,右右,左右辫秧,右左)旋轉(zhuǎn)束倍,我們來一一分析這4種旋轉(zhuǎn)方式。

RR調(diào)整

針對右孩子的右子樹引起的不平衡

tree12.jpg

調(diào)整策略

  • 右孩子c左上旋轉(zhuǎn)作為根節(jié)點(diǎn)
  • 根節(jié)點(diǎn)a左下旋轉(zhuǎn)作為c的左子樹
  • c的左子樹作為a的右子樹
tree8.jpg

LL調(diào)整

針對左孩子的左子樹引起的不平衡

tree13.jpg

調(diào)整策略

  • 左孩子b右上旋轉(zhuǎn)作為根節(jié)點(diǎn)
  • 根節(jié)點(diǎn)a右下旋轉(zhuǎn)作為b的右子樹
  • b的右子樹作為a的左子樹
tree9.jpg

LR調(diào)整

針對左孩子的右子樹引起的不平衡

tree14.jpg

調(diào)整策略

  • 根節(jié)點(diǎn)的左孩子進(jìn)行一次RR調(diào)整
  • 根節(jié)點(diǎn)進(jìn)行一次LL調(diào)整
tree10.jpg

RL調(diào)整

針對右孩子的左子樹引起的不平衡

tree15.jpg
  • 根節(jié)點(diǎn)的右孩子進(jìn)行一次LL調(diào)整
  • 根節(jié)點(diǎn)進(jìn)行一次RR調(diào)整
tree11.jpg

平衡調(diào)整的總結(jié)

現(xiàn)在我們將平衡二叉樹的調(diào)整歸納成一種簡單且好理解的記憶方式

  • LL失衡,我們稱之為LL調(diào)整绪妹,策略是對產(chǎn)生失衡的節(jié)點(diǎn)進(jìn)行兩次右右旋轉(zhuǎn)甥桂,第一次是對失衡節(jié)點(diǎn)的左孩子進(jìn)行右上旋轉(zhuǎn),第二次是對失衡節(jié)點(diǎn)進(jìn)行右下旋轉(zhuǎn)邮旷。
  • RR失衡格嘁,我們稱之為RR調(diào)整,策略是對產(chǎn)生失衡的節(jié)點(diǎn)進(jìn)行兩次左左旋轉(zhuǎn)廊移,第一次是對失衡節(jié)點(diǎn)的右孩子進(jìn)行左上旋轉(zhuǎn)糕簿,第二次是對失衡節(jié)點(diǎn)進(jìn)行左下旋轉(zhuǎn)。
  • LR失衡狡孔,我們稱之為LR調(diào)整懂诗,策略是對產(chǎn)生失衡的節(jié)點(diǎn)進(jìn)行左右旋轉(zhuǎn),第一次是對失衡節(jié)點(diǎn)的左孩子進(jìn)行LL調(diào)整苗膝,第二次是對失衡節(jié)點(diǎn)進(jìn)行RR調(diào)整殃恒。
  • RL失衡,我們稱之為RL調(diào)整辱揭,策略是對產(chǎn)生失衡的節(jié)點(diǎn)進(jìn)行右左旋轉(zhuǎn)离唐,第一次是對失衡節(jié)點(diǎn)的右孩子進(jìn)行RR調(diào)整,第二次是對失衡節(jié)點(diǎn)進(jìn)行LL調(diào)整问窃。

注意點(diǎn)亥鬓,LL失衡和RR失衡直接兩次旋轉(zhuǎn),而LR失衡和RL失衡域庇,是分別進(jìn)行兩次LL和RR的組合調(diào)整嵌戈。

實(shí)戰(zhàn)演練

現(xiàn)在我們有一關(guān)鍵字序列16,3,7,11,9,26,18,14,15,我們來逐個(gè)插入構(gòu)建一棵平衡二叉樹听皿。

  1. 插入數(shù)字16熟呛,直接插入
tree31.jpg

2.插入數(shù)字3,插入后不失衡尉姨,所以不調(diào)整庵朝。

tree32.jpg

3.插入數(shù)字7,插入后如左圖又厉,發(fā)現(xiàn)失衡九府,失衡點(diǎn)是16,此時(shí)的失衡是LR失衡馋没,根據(jù)總結(jié)規(guī)律昔逗,先對失衡點(diǎn)的左孩子進(jìn)行RR調(diào)整降传,然后再對失衡點(diǎn)進(jìn)行一次LL調(diào)整篷朵。

tree33.jpg

4.插入數(shù)字11,插入后,不失衡声旺。

tree34.jpg

5.插入數(shù)字9笔链,插入后如左圖,發(fā)現(xiàn)失衡腮猖,此時(shí)失衡節(jié)點(diǎn)有兩個(gè)節(jié)點(diǎn)16和節(jié)點(diǎn)7鉴扫,因?yàn)榇a設(shè)計(jì)是遞歸的判斷失衡,所以從從下往上的調(diào)整澈缺,所以對失衡點(diǎn)16調(diào)整坪创,此時(shí)16的失衡是LL失衡,先對失衡點(diǎn)16右孩子進(jìn)行一次LL調(diào)整姐赡,發(fā)現(xiàn)竟然平衡了莱预。所以不用繼續(xù)調(diào)整了。

tree35.jpg

6.插入數(shù)字26项滑,插入后依沮,節(jié)點(diǎn)7發(fā)生了失衡,失衡是RR失衡枪狂。所以進(jìn)行RR調(diào)整危喉。

tree36.jpg

7.插入數(shù)字18,此時(shí)節(jié)點(diǎn)16出現(xiàn)了RL失衡州疾,所以進(jìn)行RL的調(diào)整策略辜限。

tree37.jpg

8.插入數(shù)字14,此時(shí)二叉樹平衡严蓖。

tree38.jpg

9.插入數(shù)字15列粪,此時(shí)節(jié)點(diǎn)16發(fā)生了LR失衡,進(jìn)行LR調(diào)整谈飒。

tree39.jpg

好了岂座,上面就是一個(gè)完整的插入過程,可能你會注意到一個(gè)特殊情況杭措,就是再插入一個(gè)節(jié)點(diǎn)時(shí)费什,平衡二叉樹失衡點(diǎn)會不只一個(gè),這個(gè)時(shí)候選擇哪個(gè)進(jìn)行調(diào)整手素?結(jié)合代碼的思路分析鸳址,因?yàn)槎鏄涫沁f歸創(chuàng)建的,它是由根節(jié)點(diǎn)往葉子節(jié)點(diǎn)向下遞歸創(chuàng)建的泉懦,所以檢測平衡只能是逆向的稿黍,由靠近葉子的向根節(jié)點(diǎn)逐層調(diào)整,當(dāng)發(fā)現(xiàn)平衡時(shí)崩哩,就不用調(diào)整了巡球。

4.平衡二叉樹的刪除

平衡二叉樹的刪除操作分為三大部分言沐,第一大部分是先找打這個(gè)節(jié)點(diǎn),第二大部分是按照二叉排序樹的刪除規(guī)則進(jìn)行刪除(可看前面二叉排序樹),第三大部分是從該刪除點(diǎn)一直上溯到根節(jié)點(diǎn)逐個(gè)的判斷是否失衡酣栈,根據(jù)失衡條件進(jìn)行調(diào)整平衡二叉樹险胰。下面是步驟

  • 按照二叉排序樹的查找規(guī)則,去找待刪除的節(jié)點(diǎn)矿筝,沒找到直接退出起便。
  • 根據(jù)二叉排序樹總結(jié)刪除規(guī)則的三條,去選擇對應(yīng)的刪除步驟進(jìn)行刪除操作窖维。
  • 從刪除該節(jié)點(diǎn)的位置開始榆综,一直上溯到根節(jié)點(diǎn),判斷是否失衡铸史,如果失衡根據(jù)對應(yīng)失衡奖年,進(jìn)行相應(yīng)的調(diào)整處理。

刪除演示

1.刪除26沛贪,如下圖所示陋守,元素26無左右孩子,直接刪除利赋,從此處開始水评,上溯到根判斷是否失衡,發(fā)現(xiàn)18節(jié)點(diǎn)失衡媚送,是LL失衡中燥,進(jìn)行LL調(diào)整,后面到根都平衡塘偎,不用調(diào)整疗涉。

tree45.jpg

2.刪除15,如下圖所示吟秩,按照規(guī)則咱扣,15左右孩子都有,所以可以先向左走一步涵防,再一直向右走闹伪,直到此節(jié)點(diǎn)無右孩子,來到了14壮池,將14放在待刪除的15位置上偏瓤,如下圖中間,此時(shí)從該點(diǎn)開始回溯到根進(jìn)行調(diào)整椰憋,發(fā)現(xiàn)14失衡厅克,和RL失衡,進(jìn)行RL調(diào)整策略橙依。此時(shí)發(fā)現(xiàn)調(diào)整完畢結(jié)束证舟。

tree46.jpg

3.刪除18硕旗,如下圖所示,18只有一個(gè)左孩子16褪储,按照刪除規(guī)則卵渴,將該左孩子直接放在待刪除的18位置上慧域。此時(shí)整個(gè)二叉樹上溯到根節(jié)點(diǎn)都是平衡的鲤竹,不用調(diào)整,結(jié)束昔榴。

tree47.jpg

刪除操作也講述完畢辛藻,好累。大家多看看步驟互订,根據(jù)步驟去畫畫圖就可以很好的理解了吱肌。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仰禽,隨后出現(xiàn)的幾起案子氮墨,更是在濱河造成了極大的恐慌,老刑警劉巖吐葵,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件规揪,死亡現(xiàn)場離奇詭異,居然都是意外死亡温峭,警方通過查閱死者的電腦和手機(jī)猛铅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凤藏,“玉大人奸忽,你說我怎么就攤上這事∫咀” “怎么了栗菜?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蹄梢。 經(jīng)常有香客問我苛萎,道長,這世上最難降的妖魔是什么检号? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任腌歉,我火速辦了婚禮,結(jié)果婚禮上齐苛,老公的妹妹穿的比我還像新娘翘盖。我一直安慰自己,他們只是感情好凹蜂,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布馍驯。 她就那樣靜靜地躺著阁危,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汰瘫。 梳的紋絲不亂的頭發(fā)上狂打,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音混弥,去河邊找鬼趴乡。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蝗拿,可吹牛的內(nèi)容都是我干的孽糖。 我是一名探鬼主播陷猫,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俗孝?” 一聲冷哼從身側(cè)響起轿腺,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤向瓷,失蹤者是張志新(化名)和其女友劉穎业踢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗽冒,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呀伙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辛慰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片区匠。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帅腌,靈堂內(nèi)的尸體忽然破棺而出驰弄,到底是詐尸還是另有隱情,我是刑警寧澤速客,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布戚篙,位于F島的核電站,受9級特大地震影響溺职,放射性物質(zhì)發(fā)生泄漏岔擂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一浪耘、第九天 我趴在偏房一處隱蔽的房頂上張望乱灵。 院中可真熱鬧,春花似錦七冲、人聲如沸痛倚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝉稳。三九已至抒蚜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耘戚,已是汗流浹背嗡髓。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留收津,地道東北人饿这。 一個(gè)月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像朋截,于是被迫代替她去往敵國和親蛹稍。 傳聞我的和親對象是個(gè)殘疾皇子吧黄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 最近比較忙部服,沒閑得下時(shí)間寫簡書。小編在之前的分享中有講過二叉搜索樹拗慨,如下的兩顆樹都滿足二叉搜索樹的條件廓八。 圖片...
    ITsCLG閱讀 906評論 0 1
  • 一、二叉查找樹 1赵抢、定義:二叉查找樹剧蹂,也稱二叉搜索樹,或二叉排序樹烦却。其定義也比較簡單宠叼,要么是一顆空樹,要么就是具有...
    小小寧兒閱讀 3,278評論 0 9
  • 參考網(wǎng)站 一其爵、為什么要有平衡二叉樹 二叉搜索樹一定程度上可以提高搜索效率冒冬,但是當(dāng)原序列有序時(shí),例如序列 A = {...
    王王王王王景閱讀 881評論 0 0
  • 教書育人很重要摩渺,但也時(shí)刻告誡自己不要忘記IT男這個(gè)身份简烤,再忙也要抽時(shí)間學(xué)習(xí)編程知識以及總結(jié)過去積累的經(jīng)驗(yàn)。計(jì)算機(jī)算...
    ITsCLG閱讀 11,169評論 7 11
  • 一直以來摇幻,我都很少使用也避免使用到樹和圖,總覺得它們神秘而又復(fù)雜横侦,但是樹在一些運(yùn)算和查找中也不可避免的要使用到,那...
    24K男閱讀 6,737評論 5 14