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+樹的基礎上,在非根非葉子節點之間增加了指向兄弟節點的指針。