當Kotlin遇見數(shù)據(jù)結(jié)構(gòu)丨數(shù)據(jù)結(jié)構(gòu)之樹結(jié)構(gòu)概述(含滿二叉樹、完全二叉樹鹅髓、平衡二叉樹舞竿、二叉搜索樹、紅黑樹窿冯、B-樹骗奖、B+樹、B*樹)

1. 樹結(jié)構(gòu)示意圖

補充:

  • 兄弟節(jié)點:具有相同父節(jié)點的節(jié)點互稱為兄弟節(jié)點醒串。
  • 樹的深度:從根節(jié)點開始(其深度為0)自頂向下逐層累加的执桌。上圖中,3的深度是1芜赌,6的深度是2仰挣,10的深度是3。
  • 節(jié)點高度:從葉子節(jié)點開始(其高度為0)自底向上逐層累加的缠沈。6的高度是1膘壶,根節(jié)點1的高度是3错蝴。

2. 二叉樹(Binary Tree)

  • 任何一個節(jié)點的子節(jié)點數(shù)量不超過2(子節(jié)點分為左節(jié)點與右節(jié)點)。
2.1 滿二叉樹(Full Binary Tree)
  • 所有葉子結(jié)點都在最后一層颓芭。
  • 節(jié)點的總數(shù)為2^n-1 (n為樹的高度)顷锰。
2.2 完全二叉樹(Complete Binary Tree)
  • 所有葉子結(jié)點都在最后一層或倒數(shù)第二層。
  • 最后一層的葉子結(jié)點在左邊連續(xù)亡问,倒數(shù)第二節(jié)的葉子結(jié)點在右側(cè)連續(xù)官紫。
2.3 平衡二叉樹(Balanced Binary Tree)
  • 也叫 AVL 樹。
  • 它是一顆空樹或左右兩個子樹的高度差的絕對值不超過1州藕。
  • 左右兩個子樹均為平衡二叉樹万矾。
2.4 二叉搜索樹(Binary Search Tree)
  • 也叫二叉查找樹、二叉排序樹慎框。
  • 若子樹不空,則子樹上所有節(jié)點的值均小于或等于根節(jié)點的值后添。
  • 若右子樹不空笨枯,則右子樹所有節(jié)點的值均大于或等于根節(jié)點的值。
  • 左遇西、右子樹也分別為二叉排序樹馅精,或是一顆空樹。
2.5 紅黑樹(Red Black Tree)
  • 每個節(jié)點都帶有顏色屬性(顏色為紅或黑)的平衡二叉查找樹粱檀。
  • 節(jié)點是紅色或黑色洲敢。
  • 根節(jié)點是黑色。
  • 所有葉子結(jié)點都是黑色茄蚯。
  • 每個紅色節(jié)點必須有兩個黑色的子節(jié)點(從每個葉子到根的所有路徑上不能有兩個連續(xù)的紅色節(jié)點)压彭。
  • 從任一節(jié)點到其每個葉子的所有簡單路徑都包含相同數(shù)目的黑色節(jié)點。

3. B 樹

B-tree(多路搜索樹渗常,并不是二叉的)是一種常見的數(shù)據(jù)結(jié)構(gòu)壮不。使用B-tree結(jié)構(gòu)可以顯著減少定位記錄時所經(jīng)歷的中間過程,從而加快存取速度皱碘。按照翻譯询一,B 通常認為是Balance的簡稱。這個數(shù)據(jù)結(jié)構(gòu)一般用于數(shù)據(jù)庫的索引癌椿,綜合效率較高健蕊。

3.1 B- 樹

B-樹 就是指 B樹,也是一種用于查找的平衡樹踢俄,但是它不是二叉樹缩功,B樹可以擁有多于2個子節(jié)點,能夠用來存儲排序后的數(shù)據(jù)都办。這種數(shù)據(jù)結(jié)構(gòu)能夠讓查找數(shù)據(jù)掂之、循序存取抗俄、插入數(shù)據(jù)及刪除的動作,都在對數(shù)時間內(nèi)完成世舰。這種數(shù)據(jù)結(jié)構(gòu)常被應(yīng)用在數(shù)據(jù)庫和文件系統(tǒng)的實作上动雹。

  • 定義任意非葉子結(jié)點最多只有M個兒子;且M>2跟压。

  • 根結(jié)點的兒子數(shù)為[2, M]胰蝠。

  • 除根結(jié)點以外的非葉子結(jié)點的兒子數(shù)為[M/2, M]。

  • 每個結(jié)點存放至少M/2-1(取上整)和至多M-1個關(guān)鍵字震蒋;(至少2個關(guān)鍵字)茸塞。

  • 非葉子結(jié)點的關(guān)鍵字個數(shù)=指向兒子的指針個數(shù)-1。

  • 非葉子結(jié)點的關(guān)鍵字:K[1], K[2], …, K[M-1]查剖;且K[i] < K[i+1]钾虐。

  • 非葉子結(jié)點的指針:P[1], P[2], …, P[M];其中P[1]指向關(guān)鍵字小于K[1]的子樹笋庄,P[M]指向關(guān)鍵字大于K[M-1]的子樹效扫,其它P[i]指向關(guān)鍵字屬于(K[i-1], K[i])的子樹。

  • 所有葉子結(jié)點位于同一層直砂。

3.2 B+ 樹

B+樹 是 B樹 的變體菌仁,也是一種多路搜索樹

  • 其定義基本與B-樹相同,除了:

  • 非葉子結(jié)點的子樹指針與關(guān)鍵字個數(shù)相同静暂。

  • 非葉子結(jié)點的子樹指針P[i]济丘,指向關(guān)鍵字值屬于[K[i], K[i+1])的子樹(B-樹是開區(qū)間)。

  • 為所有葉子結(jié)點增加一個鏈指針洽蛀。

  • 所有關(guān)鍵字都在葉子結(jié)點出現(xiàn)摹迷。

特性:

  1. 所有關(guān)鍵字都出現(xiàn)在葉子結(jié)點的鏈表中(稠密索引),且鏈表中的關(guān)鍵字恰好是有序的郊供。

  2. 不可能在非葉子結(jié)點命中泪掀。

  3. 非葉子結(jié)點相當于是葉子結(jié)點的索引(稀疏索引),葉子結(jié)點相當于是存儲(關(guān)鍵字)數(shù)據(jù)的數(shù)據(jù)層颂碘。

  4. B+樹的分裂:當一個結(jié)點滿時异赫,分配一個新的結(jié)點,并將原結(jié)點中1/2的數(shù)據(jù)復(fù)制到新結(jié)點头岔,最后在父結(jié)點中增加新結(jié)點的指針塔拳;B+樹的分裂只影響原結(jié)點和父結(jié)點,而不會影響兄弟結(jié)點峡竣,所以它不需要指向兄弟的指針靠抑。

  5. 更適合文件索引系統(tǒng)。

3.3 B* 樹

是 B+樹 的變體适掰,在 B+樹 的非根和非葉子結(jié)點再增加指向兄弟的指針

特性:

  1. B*樹定義了非葉子結(jié)點關(guān)鍵字個數(shù)至少為(2/3)M颂碧,即塊的最低使用率為2/3(代替B+樹的1/2)荠列。

  2. B*樹的分裂:當一個結(jié)點滿時,如果它的下一個兄弟結(jié)點未滿载城,那么將一部分數(shù)據(jù)移到兄弟結(jié)點中肌似,再在原結(jié)點插入關(guān)鍵字,最后修改父結(jié)點中兄弟結(jié)點的關(guān)鍵字(因為兄弟結(jié)點的關(guān)鍵字范圍改變了)诉瓦;如果兄弟也滿了川队,則在原結(jié)點與兄弟結(jié)點之間增加新結(jié)點,并各復(fù)制1/3的數(shù)據(jù)到新結(jié)點睬澡,最后在父結(jié)點增加新結(jié)點的指針固额。

所以,B*樹分配新結(jié)點的概率比B+樹要低煞聪,空間使用率更高斗躏。


本篇到此完結(jié),如有補充內(nèi)容隨時更新昔脯!歡迎關(guān)注本人繼續(xù)跟進技術(shù)干貨的更新啄糙!


推薦一款超好玩的微信小程序,無數(shù)俊男靚女為之瘋狂栅干!(真的好玩!×3)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捐祠,一起剝皮案震驚了整個濱河市碱鳞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踱蛀,老刑警劉巖窿给,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異率拒,居然都是意外死亡崩泡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門猬膨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來角撞,“玉大人,你說我怎么就攤上這事勃痴≮怂” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵沛申,是天一觀的道長劣领。 經(jīng)常有香客問我,道長铁材,這世上最難降的妖魔是什么尖淘? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任奕锌,我火速辦了婚禮,結(jié)果婚禮上村生,老公的妹妹穿的比我還像新娘惊暴。我一直安慰自己,他們只是感情好梆造,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布缴守。 她就那樣靜靜地躺著,像睡著了一般镇辉。 火紅的嫁衣襯著肌膚如雪屡穗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天忽肛,我揣著相機與錄音村砂,去河邊找鬼。 笑死屹逛,一個胖子當著我的面吹牛础废,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罕模,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼评腺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淑掌?” 一聲冷哼從身側(cè)響起蒿讥,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抛腕,沒想到半個月后芋绸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡担敌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年摔敛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片全封。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡马昙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刹悴,到底是詐尸還是另有隱情给猾,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布颂跨,位于F島的核電站敢伸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恒削。R本人自食惡果不足惜池颈,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一尾序、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躯砰,春花似錦每币、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至李茫,卻和暖如春揭保,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背魄宏。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工秸侣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宠互。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓味榛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親予跌。 傳聞我的和親對象是個殘疾皇子搏色,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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