二叉樹各種類型匯總



學習了樹的結構類型后,主要對各種樹類型進行匯總總結

1 樹類型

樹中的基本概念:https://jingzh.blog.csdn.net/article/details/107128291
樹類型概述:
二叉樹,完全二叉樹,滿二叉樹,二叉排序樹,平衡二叉樹,紅黑樹,B樹,B+樹,B*樹

1.1 二叉樹

二叉樹:二叉樹是每個節點最多有兩個子樹的樹結構;
n(n>=0)個結點的有限集合,它或者是空樹(n=0),或者是由一個根結點及兩顆互不相交的、分別稱為左子樹和右子樹的二叉樹所組成

在這里插入圖片描述
二叉樹特點:

  • 每個結點最多有兩顆子樹,所以二叉樹中不存在度(結點擁有的子樹數目稱為結點的)大於2的結點
  • 左子樹和右子樹是有順序的,次序不能任意顛倒
  • 即使樹中某結點只有一棵子樹,也要區分它是左子樹還是右子樹

1.2 完全二叉樹

完全二叉樹:除最后一層外,每一層上的結點數均達到最大值;在最后一層上只缺少右邊的若干結點
在這里插入圖片描述

完全二叉樹特點:

  • 葉子結點只能出現在最下層和次下層。
  • 最下層的葉子結點集中在樹的左部。
  • 倒數第二層若存在葉子結點,一定在右部連續位置。
  • 如果結點度為1,則該結點只有左孩子,即沒有右子樹。
  • 同樣結點數目的二叉樹,完全二叉樹深度最小

1.3 滿二叉樹

除最后一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹
在這里插入圖片描述
滿二叉樹特點:

  • 葉子只能出現在最下一層。出現在其它層就不可能達成平衡。
  • 非葉子結點的度(結點擁有的子樹數目稱為結點的)一定是2
  • 在同樣深度的二叉樹中,滿二叉樹的結點個數最多,葉子數最多

1.4 二叉搜索樹(二叉排序樹、二叉查找樹)

二叉排序樹:可以為空樹,或者是具備如下性質:若它的左子樹不空,則左子樹上的所有結點的值均小於根節點的值;若它的右子樹不空,則右子樹上的所有結點的值均大於根節點的值,左右子樹分別為二叉排序樹。
如下圖所示:
在這里插入圖片描述
但是還有一種特殊情況:
在這里插入圖片描述
這種情況下,二叉搜索樹已經變更為鏈表,搜索一個元素的時間復雜度也變成了O(n)出現這種情況的原因是二叉搜索樹沒有自平衡的機制,所以就有了平衡二叉樹

1.5 平衡二叉樹

平衡二叉樹是一種概念,是二叉查找樹的一個進化體,它有幾種實現方式:紅黑樹AVL樹
它是一個空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是平衡二叉樹,如果插入或者刪除一個節點使得高度之差大於1,就要進行節點之間的旋轉,將二叉樹重新維持在一個平衡狀態。

這個方案很好的解決了二叉查找樹退化成鏈表的問題,把插入,查找,刪除的時間復雜度最好情況和最壞情況都維持在O(logN)。但是頻繁旋轉會使插入和刪除犧牲掉O(logN)左右的時間,不過相對二叉查找樹來說,時間上穩定了很多
在這里插入圖片描述

1.6 紅黑樹

1.6.1 紅黑樹概念

紅黑樹是一種平衡二叉查找樹的變體,它的左右子樹高差有可能大於1,所以紅黑樹不是嚴格意義上的平衡二叉樹(AVL),但對之進行平衡的代價較低, 其平均統計性能要強於 AVL
在這里插入圖片描述
紅黑樹的特性:

  • 每個節點或者是黑色,或者是紅色
  • 根節點是黑色
  • 每個葉結點是黑色
  • 如果一個節點是紅色的,則它的子節點必須是黑色的,紅色節點的孩子和父親都不能是紅色。從每個葉子到根的所有路徑上不能有兩個連續的紅色節點,任意一結點到每個葉子結點的路徑都包含數量相同的黑結點。確保沒有一條路徑會比其他路徑長出倆倍。因而,紅黑樹是相對接近平衡的二叉樹,並不是一個完美平衡二叉查找樹

1.6.2 紅黑樹和AVL樹區別

紅黑樹和AVL樹區別
RB-TreeAVL樹作為二叉搜索樹(BBST),其實現的算法時間復雜度相同,AVL作為最先提出的BBST,貌似RB-tree實現的功能都可以用AVL樹是代替,那么為什么還需要引入RB-Tree

  • 紅黑樹不追求完全平衡,即不像AVL那樣要求節點的 高度差的絕對值 <= 1,它只要求部分達到平衡,但是提出了為節點增加顏色,紅黑是用非嚴格的平衡來換取增刪節點時候旋轉次數的降低,任何不平衡都會在三次旋轉之內解決,而AVL是嚴格平衡樹,因此在增加或者刪除節點的時候,根據不同情況,旋轉的次數比紅黑樹要多
  • 就插入節點導致樹失衡的情況,AVLRB-Tree都是最多兩次樹旋轉來實現復衡rebalance,旋轉的量級是O(1)
  • 刪除節點導致失衡,AVL需要維護從被刪除節點到根節點root這條路徑上所有節點的平衡,旋轉的量級為O(logN),而RB-Tree最多只需要旋轉3次實現復衡,只需O(1),所以說RB-Tree刪除節點的rebalance的效率更高,開銷更小
  • AVL的結構相較於RB-Tree更為平衡,插入和刪除引起失衡,RB-Tree復衡效率更高;當然,由於AVL高度平衡,因此AVL的Search效率更高
  • 針對插入和刪除節點導致失衡后的rebalance操作,紅黑樹能夠提供一個比較便宜的解決方案,降低開銷,是對searchinsert ,以及delete效率的折衷,總體來說,RB-Tree的統計性能高於AVL
  • 故引入RB-Tree是功能、性能、空間開銷的折中結果
    AVL更平衡,結構上更加直觀,時間效能針對讀取而言更高;維護稍慢,空間開銷較大。
    紅黑樹,讀取略遜於AVL,維護強於AVL,空間開銷與AVL類似,內容極多時略優於AVL,維護優於AVL。

總結:實際應用中,若搜索的次數遠遠大於插入和刪除,那么選擇AVL,如果搜索,插入刪除次數幾乎差不多,應該選擇RB-Tree

1.7 B樹類型

1.7.1 B樹(B-樹、B_樹)

一種平衡的多叉樹,稱為B樹(或B-樹B_樹B:balanced說明B樹和平衡樹有關系)
在這里插入圖片描述
一棵M階B樹(M階數:表示此樹的結點最多有多少個孩子結點(子樹))是一棵平衡的m路搜索樹。它或者是空樹,或者是滿足下列性質的樹:

  1. 根結點至少有兩個子女;
  2. 每個非根節點所包含的關鍵字個數 j 滿足:┌m/2┐ - 1 <= j <= m - 1;
  3. 除根結點以外的所有結點(不包括葉子結點)的度數正好是關鍵字總數加1,故內部子樹個數 k 滿足:┌m/2┐ <= k <= m ;
  4. 所有的葉子結點都位於同一層。

簡單理解為:平衡多叉樹為B樹(每一個子節點上都是有數據的),葉子節點之間無指針相鄰

B樹的搜索,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那么就命中;否則,如果查詢關鍵字比結點關鍵字小,就進入左兒子;如果比結點關鍵字大,就進入右兒子;如果左兒子或右兒子的指針為空,則報告找不到相應的關鍵字;重復,直到所對應的兒子指針為空,或已經是葉子結點

如果B樹的所有非葉子結點的左右子樹的結點數目均保持差不多(平衡),那么B樹的搜索性能逼近二分查找;但它比連續內存空間的二分查找的優點是,改變B樹結構(插入與刪除結點)不需要移動大段的內存數據,甚至通常是常數開銷;但B樹在經過多次插入與刪除后,有可能導致不同的結構

B-樹的特性:

  1. 關鍵字集合分布在整顆樹中;
  2. 任何一個關鍵字出現且只出現在一個結點中;
  3. 搜索有可能在非葉子結點結束;
  4. 其搜索性能等價於在關鍵字全集內做一次二分查找;
  5. 自動層次控制;

由於M階B樹每個結點最少M/2個結點的限制,是為了最大限度的減少查找路徑的長度,提供查找效率

1.7.2 B+樹

B+樹是B樹的一種變形形式,B+樹上的葉子結點存儲關鍵字以及相應記錄的地址,葉子結點以上各層作為索引使用。一棵m階的B+樹定義如下

  1. 每個結點至多有m個子女;
  2. 除根結點外,每個結點至少有[m/2]個子女,根結點至少有兩個子女;
  3. 有k個子女的結點必有k個關鍵字

B+樹的查找與B樹不同,當索引部分某個結點的關鍵字與所查的關鍵字相等時,並不停止查找,應繼續沿着這個關鍵字左邊的指針向下,一直查到該關鍵字所在的葉子結點為止。
在這里插入圖片描述

1.7.3 B*樹

B*樹B+樹的變體,在B+樹的非根和非葉子結點再增加指向兄弟的指針;
B*樹定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2);

B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的數據復制到新結點,最后在父結點中增加新結點的指針;B+樹的分裂只影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指針;

B*樹的分裂:當一個結點滿時,如果它的下一個兄弟結點未滿,那么將一部分數據移到兄弟結點中,再在原結點插入關鍵字,最后修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字范圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各復制1/3的數據到新結點,最后在父結點增加新結點的指針;所以,B*樹分配新結點的概率比B+樹要低,空間使用率更高

B樹類型總結:

  • 二叉搜索樹:二叉樹,每個結點只存儲一個關鍵字,等於則命中,小於走左結點,大於走右結點;
  • B樹(B-樹):多路搜索樹,每個結點存儲M/2到M(M是指M階B樹)個關鍵字,非葉子結點存儲指向關鍵字范圍的子結點;所有關鍵字在整顆樹中出現,且只出現一次,非葉子結點可以命中;
  • B+樹:在B-樹基礎上,為葉子結點增加鏈表指針,所有關鍵字都在葉子結點中出現,非葉子結點作為葉子結點的索引;B+樹總是到葉子結點才命中;
  • B*樹:在B+樹基礎上,為非葉子結點也增加鏈表指針,將結點的最低利用率從1/2提高到2/3


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM