多叉樹 & B樹 & B+樹 & B*樹

1. 二叉樹存在的問題:

二叉樹雖然操作效率比較高,但是如果數據一多,就會有好多好多的節點,需要進行好多次的I/O操作,構建出來的二叉樹就會很高很高,也會降低操作速度。

2. 怎麼解決?

二叉樹因爲每個節點只能有兩個子節點,所以數據一多構建出來的樹的高度會很高。所以就出現了多叉樹,顧名思義,每個節點可以有多個子節點,這樣來降低樹的高度。

3. 常見多叉樹:

(1). 2-3樹:

第二層左邊的節點,有兩個元素,7和5,它又有3個子節點,這就叫做2-3樹,其中節點7 5稱爲3節點,節點9稱爲2節點。

2-3樹是最簡單的B樹,它有以下特點:

  • 首先它也要滿足排序樹的特點,即左子節點都比父節點小,右子節點都比父節點大,如果3節點,那麼中間那個元素要介於左節點和右節點之間,即6是介於4和11之間的;

  • 所有的葉子節點都在同一層(B樹都滿足這個條件);

  • 有兩個葉子節點的叫二節點,二節點要麼兩個子節點,要麼沒有子節點;

  • 有三個子節點的節點叫三節點,三節點要麼有三個子節點,要麼沒有子節點;

  • 2-3樹就是由二節點和三節點構成的樹。

(2). 2-3-4樹:

和2-3樹的區別就是,它還允許節點有三個元素且有四個子節點。

4. B樹:

B是balance,平衡的意思,所以,B樹首先是一棵平衡樹,而平衡樹首先得是一棵排序數。所以B樹就是一棵平衡的、排序的多叉樹。B的相關說明如下:

  • B樹的階:節點的最多子節點個數叫做階。比如2-3樹的階就是3,2-3-4樹的階就是4;

  • B樹的搜索:從根節點開始,對節點內的元素進行二分查找,如果找到就結束,否則進入查找元素所屬範圍的子節點再進行二分查找,直到找到或者到達葉子節點;

  • B樹的所有節點都會存放數據;

5. B+樹:

B+樹是B樹的變體,和B樹的區別就是,B+樹所有數據都存放在葉子節點。

  • B+樹所有的數據都存放在葉子節點的鏈表中,且鏈表中的數據也是有序的;

  • 非葉子節點中存放的是索引,而不是要操作的數據,每個非葉子節點都會存放葉子節點的索引,也叫稀疏索引;

  • B+樹要進行搜素時,從根節點開始,通過與根節點索引的比較,就知道要往左子樹查找還是往中間查找還是往右子樹查找,到了子樹的時候再通過與子樹中存放的索引比較,又可以直到要往那一邊查找。

  • B+樹一般用於文件系統;

6. B*樹:

B*樹又是B+樹的變體,就是在B+樹的基礎上,在非根非葉子節點之間增加了指向兄弟節點的指針。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章