樹:
- 樹是一種遞歸數據結構,包含一個或多個數據節點的集合,其中一個節點被指定爲樹的根節點,而其他節點被稱爲根的子節點。
- 除根節點之外的其餘節點均被劃分爲多個非空集,其中每一個空集都稱爲子樹。
- 樹的節點或者在它們之間保持父子關係,或者它們是姐妹節點。
- 在通常樹中,一個節點能夠有任意數量的子節點,但只能有一個父節點。
- 下圖顯示了一棵樹,其中節點A是樹的根節點,而其餘節點能夠看做是A的孩子。

基本術語
- 根節點:-根節點是樹層次結構中的最高節點。換句話說,根節點是沒有任何父節點的節點。
- 子樹:-若是根節點不爲空,則樹T1,T2和T3被稱爲根節點的子樹。
- 葉子節點:-沒有任何子節點的樹的節點稱爲葉子節點。葉節點是樹的最底部節點。普通樹中能夠有任意數量的葉節點。葉節點也能夠稱爲外部節點。
- 程度:-節點的程度等於節點具備的子代數。在上圖所示的樹中,節點B的度爲2。葉節點的度始終爲0,而在完整的二叉樹中,每一個節點的度均等於2。
二叉樹:
每一個節點最多有2個節點的樹;java
二叉樹的類型
1.嚴格二叉樹
每一個非葉節點都包含非空的左右子樹算法

2.滿二叉樹(特殊的徹底二叉樹)
全部的葉子節點都位於同一級。數組

二叉排序樹:
二叉樹的基礎上知足以下特性則爲二叉排序樹;數據結構
- 若它的左子樹不爲空,則左子樹的全部節點的值均小於它的根節點。
- 若它的右子樹不爲空,則右子樹的全部節點的值均大於它的根節點。
- 它的左右子樹也分別爲二叉排序樹。

優勢:
- 在二叉搜索樹中搜索變得很是有效,由於咱們在每一步都獲得了提示,即哪一個子樹包含所需的元素。
- 與數組和鏈表相比,二進制搜索樹被認爲是有效的數據結構。在搜索過程當中,它會在每一個步驟中刪除一半的子樹。在二叉搜索樹中搜索元素須要o(log 2 n)時間。在最壞的狀況下,搜索元素所需的時間爲0(n)。
- 與數組和鏈表中的插入和刪除操做相比,它還加快了插入和刪除操做的速度。
二叉平衡樹(AVL):
全部節點的左右子樹的高度差小於1的二叉排序樹;spa

B樹:
B樹出現是由於磁盤IO。IO操做的效率很低,那麼,當在大量數據存儲中,查詢時咱們不能一會兒將全部數據加載到內存中,只能逐一加載磁盤頁,每一個磁盤頁對應樹的節點。形成大量磁盤IO操做(最壞狀況下爲樹的高度)。平衡二叉樹因爲樹深度過大而形成磁盤IO讀寫過於頻繁,進而致使效率低下。
因此,咱們爲了減小磁盤IO的次數,就你必須下降樹的深度,將「瘦高」的樹變得「矮胖」。
B 樹又叫平衡多路查找樹。一棵m階的B 樹 (m叉樹)的特性以下:
- 根節點必須至少含有2個節點。
- 除了根節點和葉節點以外,B樹中的每一個節點至少包含m / 2個子節點。
- B樹中的每一個節點最多包含m個子節點
- 全部葉節點必須處於同一級別。
下圖顯示了4階AB樹。
B+樹:
B +樹是B樹的擴展,它容許有效的插入,刪除和搜索操做。blog
在B樹中,鍵和記錄均可以存儲在內部節點和葉節點中。而在B +樹中,記錄(數據)只能存儲在葉節點上,而內部節點只能存儲鍵值。排序
B +樹的葉節點以單連接列表的形式連接在一塊兒,以使搜索查詢更高效。遞歸
B +樹用於存儲沒法存儲在主存儲器中的大量數據。因爲老是限制主存儲器的大小,所以B +樹的內部節點(訪問記錄的鍵)存儲在主存儲器中,而葉節點存儲在輔助存儲器中。索引
B +樹的內部節點一般稱爲索引節點。下圖顯示了3級的B +樹。內存

B +樹的優點
- 能夠以相同數量的磁盤訪問來獲取記錄。
- 與B樹相比,樹的高度保持平衡而且較小。
- 咱們能夠依次或直接訪問存儲在B +樹中的數據。
- 鍵用於索引。
- 因爲數據僅存儲在葉節點上,所以搜索查詢速度更快。
B樹VS B +樹
SN |
B樹 |
B +樹 |
1個 |
搜索鍵不能重複存儲。 |
可能存在冗餘搜索鍵。 |
2 |
數據能夠存儲在葉節點以及內部節點中 |
數據只能存儲在葉節點上。 |
3 |
搜索一些數據的過程較慢,由於能夠在內部節點以及葉節點上找到數據。 |
因爲只能在葉節點上找到數據,所以搜索相對較快。 |
4 |
內部節點的刪除是如此複雜且耗時。 |
刪除毫不會是一個複雜的過程,由於元素老是會從葉節點中刪除。 |
5 |
葉節點不能連接在一塊兒。 |
葉節點連接在一塊兒,使搜索操做更高效。 |
紅黑樹:
紅黑樹是一棵二叉搜索樹,它在每一個節點上增長了一個存儲位來表示節點的顏色,能夠是Red或Black。
經過對任意一條從根到葉子的簡單路徑上各個節點的顏色進行約束,紅黑樹確保沒有一條路徑會比其餘路徑長出2倍,於是是近似平衡的。
特性:
- 每一個節點要麼是紅色,要麼是黑色。
- 根節點是黑色。
- 葉子節點是黑色。
- 相鄰的兩個節點不能同時位紅色。
- 任意節點到其全部後代葉子節點的路徑上,都包含相同數目的黑色節點。
- 插入的節點必定是紅色。

從某個節點x出發(不含該節點)到達一個葉節點的任意一條簡單路徑上的黑色節點個數成爲該節點的黑高;
(以上若有錯誤或理解不到位地方歡迎指正)
參考資料: