1. 樹結構示意圖
補充:
- 兄弟節點:具有相同父節點的節點互稱為兄弟節點。
- 樹的深度:從根節點開始(其深度為0)自頂向下逐層累加的。上圖中,3的深度是1,6的深度是2,10的深度是3。
- 節點高度:從葉子節點開始(其高度為0)自底向上逐層累加的。6的高度是1,根節點1的高度是3。
2. 二叉樹(Binary Tree)
- 任何一個節點的子節點數量不超過2(子節點分為左節點與右節點)。
2.1 滿二叉樹(Full Binary Tree)
- 所有葉子結點都在最後一層。
- 節點的總數為2^n-1 (n為樹的高度)。
2.2 完全二叉樹(Complete Binary Tree)
- 所有葉子結點都在最後一層或倒數第二層。
- 最後一層的葉子結點在左邊連續,倒數第二節的葉子結點在右側連續。
2.3 平衡二叉樹(Balanced Binary Tree)
- 也叫 AVL 樹。
- 它是一顆空樹或左右兩個子樹的高度差的絕對值不超過1。
- 左右兩個子樹均為平衡二叉樹。
2.4 二叉搜尋樹(Binary Search Tree)
- 也叫二叉查詢樹、二叉排序樹。
- 若子樹不空,則子樹上所有節點的值均小於或等於根節點的值。
- 若右子樹不空,則右子樹所有節點的值均大於或等於根節點的值。
- 左、右子樹也分別為二叉排序樹,或是一顆空樹。
2.5 紅黑樹(Red Black Tree)
- 每個節點都帶有顏色屬性(顏色為紅或黑)的平衡二叉查詢樹。
- 節點是紅色或黑色。
- 根節點是黑色。
- 所有葉子結點都是黑色。
- 每個紅色節點必須有兩個黑色的子節點(從每個葉子到根的所有路徑上不能有兩個連續的紅色節點)。
- 從任一節點到其每個葉子的所有簡單路徑都包含相同數目的黑色節點。
3. B 樹
B-tree(多路搜尋樹,並不是二叉的)是一種常見的資料結構。使用B-tree結構可以顯著減少定位記錄時所經歷的中間過程,從而加快存取速度。按照翻譯,B 通常認為是Balance的簡稱。這個資料結構一般用於資料庫的索引,綜合效率較高。
3.1 B- 樹
B-樹 就是指 B樹,也是一種用於查詢的平衡樹,但是它不是二叉樹,B樹可以擁有多於2個子節點,能夠用來儲存排序後的資料。這種資料結構能夠讓查詢資料、循序存取、插入資料及刪除的動作,都在對數時間內完成。這種資料結構常被應用在資料庫和檔案系統的實作上。
-
定義任意非葉子結點最多隻有M個兒子;且M>2。
-
根結點的兒子數為[2, M]。
-
除根結點以外的非葉子結點的兒子數為[M/2, M]。
-
每個結點存放至少M/2-1(取上整)和至多M-1個關鍵字;(至少2個關鍵字)。
-
非葉子結點的關鍵字個數=指向兒子的指標個數-1。
-
非葉子結點的關鍵字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]。
-
非葉子結點的指標:P[1], P[2], …, P[M];其中P[1]指向關鍵字小於K[1]的子樹,P[M]指向關鍵字大於K[M-1]的子樹,其它P[i]指向關鍵字屬於(K[i-1], K[i])的子樹。
-
所有葉子結點位於同一層。
3.2 B+ 樹
B+樹 是 B樹 的變體,也是一種多路搜尋樹
-
其定義基本與B-樹相同,除了:
-
非葉子結點的子樹指標與關鍵字個數相同。
-
非葉子結點的子樹指標P[i],指向關鍵字值屬於[K[i], K[i+1])的子樹(B-樹是開區間)。
-
為所有葉子結點增加一個鏈指標。
-
所有關鍵字都在葉子結點出現。
特性:
-
所有關鍵字都出現在葉子結點的連結串列中(稠密索引),且連結串列中的關鍵字恰好是有序的。
-
不可能在非葉子結點命中。
-
非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是儲存(關鍵字)資料的資料層。
-
B+樹的分裂:當一個結點滿時,分配一個新的結點,並將原結點中1/2的資料複製到新結點,最後在父結點中增加新結點的指標;B+樹的分裂隻影響原結點和父結點,而不會影響兄弟結點,所以它不需要指向兄弟的指標。
-
更適合檔案索引系統。
3.3 B* 樹
是 B+樹 的變體,在 B+樹 的非根和非葉子結點再增加指向兄弟的指標
特性:
-
B**樹定義了非葉子結點關鍵字個數至少為(2/3)*M,即塊的最低使用率為2/3(代替B+樹的1/2)。
-
B*樹的分裂:當一個結點滿時,如果它的下一個兄弟結點未滿,那麼將一部分資料移到兄弟結點中,再在原結點插入關鍵字,最後修改父結點中兄弟結點的關鍵字(因為兄弟結點的關鍵字範圍改變了);如果兄弟也滿了,則在原結點與兄弟結點之間增加新結點,並各複製1/3的資料到新結點,最後在父結點增加新結點的指標。
所以,B*樹分配新結點的概率比B+樹要低,空間使用率更高。
本篇到此完結,如有補充內容隨時更新!歡迎關注本人繼續跟進技術乾貨的更新!