2-3-4樹及2-3樹的總結(jié)

1. 2-3-4樹及2-3樹的定義以及操作

參見紅黑樹專題

2. 2-3-4樹以及2-3樹的第一個(gè)實(shí)現(xiàn)——紅黑樹

參見紅黑樹專題
參見查找樹(搜索樹)中的紅黑樹

3. 2-3-4樹的第二實(shí)現(xiàn)——1-2-3確定性跳躍表

參見隨機(jī)算法中的跳躍表及其因素

4. 2-3樹的實(shí)現(xiàn)——AA樹(基于2-3樹的右傾紅黑樹變種)

4.1 AA樹的定義與實(shí)現(xiàn)

一棵紅黑樹是滿足下面紅黑性質(zhì)的二叉搜索樹:

  • 1.每個(gè)結(jié)點(diǎn)或是紅色的,或是黑色的
  • 2.根節(jié)點(diǎn)是黑色的
  • 3.每個(gè)葉節(jié)點(diǎn)NIL時(shí)黑色的(這條性質(zhì)可去掉)
  • 4.如果一個(gè)結(jié)點(diǎn)是紅色的,則它的兩個(gè)子節(jié)點(diǎn)都是黑色的
  • 5.對(duì)每個(gè)結(jié)點(diǎn),從該節(jié)點(diǎn)到其所有后代葉節(jié)點(diǎn)的簡(jiǎn)單路徑上,均包含相同數(shù)目的黑色結(jié)點(diǎn)

AA樹的附加條件:

  • 一個(gè)結(jié)點(diǎn)最多可以有一個(gè)紅兒子,并且只有右兒子可以是紅兒子(消除了約一半的可能情形)。
    如果一個(gè)內(nèi)部結(jié)點(diǎn)只有一個(gè)兒子,那么這個(gè)兒子一定是右兒子(紅色)。那么在刪除時(shí),總是可以用一個(gè)內(nèi)部結(jié)點(diǎn)的右子樹中的最小結(jié)點(diǎn)代替該內(nèi)部結(jié)點(diǎn)。(一個(gè)兒子結(jié)點(diǎn)是右兒子,兩個(gè)兒子結(jié)點(diǎn)用右兒子代替,因此總是用右兒子代替。)
  • 結(jié)點(diǎn)的層次(本質(zhì)上是2-3樹每個(gè)結(jié)點(diǎn)的高度):
    1)若該結(jié)點(diǎn)是樹葉,則為1
    2)若該結(jié)點(diǎn)是紅的,則為其父結(jié)點(diǎn)的層次
    3)若該結(jié)點(diǎn)是黑的,則比父結(jié)點(diǎn)少1


本質(zhì)上是一棵2-3樹

4.2 AA樹的操作

4.2.1 插入




實(shí)質(zhì)上是自底向上的2-3樹插入

1)skew和split操作
插入的問題:

  • 產(chǎn)生一個(gè)左水平鏈接——通過右旋消除
  • 產(chǎn)生兩個(gè)連續(xù)的右水平鏈接——通過左旋消除



2)插入操作(遞歸操作實(shí)現(xiàn)的是自底向上的插入)

4.2.2 刪除

刪除總可以歸結(jié)為葉子節(jié)點(diǎn)的刪除,如果該節(jié)點(diǎn)不是樹葉,則總是可以歸結(jié)為其右子樹上最小的兒子(葉子節(jié)點(diǎn))來代替這個(gè)節(jié)點(diǎn)。



注意:

  • 代碼中,DeletePtr和LastPtr是static變量,因此只有在最底層葉子的時(shí)候,LastPtr才等于T,其余時(shí)候都不等于。因此才有了step2和step3的區(qū)分。
  • 最底層葉子刪除的時(shí)候,指向的是NullNode,該節(jié)點(diǎn)的高度為0.因此會(huì)有step3的條件:
    T->Right->level < T->level - 1或者
    T->Left->level < T->level - 1
  • 當(dāng)刪除紅色結(jié)點(diǎn),不要挑戰(zhàn);
    (重要——核心本質(zhì))當(dāng)刪除黑色結(jié)點(diǎn)時(shí),會(huì)主動(dòng)使2-3樹父節(jié)點(diǎn)的高度減一,即將2-3樹的2-結(jié)點(diǎn)或者3-結(jié)點(diǎn)與該結(jié)點(diǎn)還剩下的兒子結(jié)點(diǎn)合并,然后通過分裂達(dá)到平衡。
  • skew是將左鏈接改為右鏈接,使其符合AA樹的定義,但是對(duì)于2-3樹來說,是在一個(gè)結(jié)點(diǎn)內(nèi)的改變
  • split是將4-結(jié)點(diǎn)分裂成3個(gè)2-結(jié)點(diǎn),使得2-3樹增加
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. 算法之變,結(jié)構(gòu)為宗 計(jì)算機(jī)在很多情況下被應(yīng)用于檢索數(shù)據(jù),比如航空和鐵路運(yùn)輸業(yè)的航班信息和列車時(shí)刻表的查詢,都...
    Leesper閱讀 7,371評(píng)論 13 42
  • 目錄 0.樹0.1 一般樹的定義0.2 二叉樹的定義 1.查找樹ADT 2.查找樹的實(shí)現(xiàn)2.1 二叉查找樹2.2 ...
    王偵閱讀 7,557評(píng)論 0 3
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,661評(píng)論 0 25
  • 日料,火鍋,餅夾菜,咖啡,飲料,冰淇淋。能吃的不能吃的,該喝的不該喝的,都一并過足癮了。深蹲,散步,瑜伽球,爬樓梯...
    鄒鄒_依依的媽媽閱讀 263評(píng)論 0 0
  • 小雨初晴,空氣中彌漫著淡淡的清香。覓陽心情不錯(cuò),從死寂的宿舍樓出來,此時(shí)的他感受到了久違的孤獨(dú)。 他朝著校...
    心島覓陽閱讀 967評(píng)論 0 1

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