B-樹是一種常見的數(shù)據(jù)結(jié)構(gòu)。和他一起的還有B+樹。
在這里,需要澄清一下概念。B樹,B-樹,B+樹有什么區(qū)別?他們有什么關(guān)系呢?
其實(shí),從數(shù)據(jù)結(jié)構(gòu)來講只有2種,也就是B-樹和B+樹。有時(shí)候,B-樹又稱為B樹,他們是一個(gè)東西。請注意,B-樹中間的“-”是連字符,而不是“減號”。英文中是B-Tree,翻譯成中文后,也就是B樹,有的翻譯喜歡把連字符“-”也帶著,于是就成了B-樹,而B-樹被有些讀者誤讀為B減樹。
介紹B-樹之前,首先看一下一個(gè)重要的概念:階。
一個(gè)樹的階,就是這個(gè)樹中各個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù)的最大值。也就是說,如果有的節(jié)點(diǎn)有2個(gè)子節(jié)點(diǎn),有的節(jié)點(diǎn)有4個(gè)子節(jié)點(diǎn),最多的有5個(gè)子節(jié)點(diǎn),那么,這個(gè)樹的階就是5.
從這個(gè)角度來講,二叉樹的階是2.
接下來,我們介紹一下B-樹的主要性質(zhì)。我們假定B-樹的階為m。一個(gè)m階的B-樹,要么是一個(gè)空樹,要么是具有如下性質(zhì)的樹:
1,每個(gè)節(jié)點(diǎn)最多有m個(gè)子節(jié)點(diǎn)。最少有m/2(向上取整)個(gè)節(jié)點(diǎn)。或者這么表述:m/2 = 子節(jié)點(diǎn)個(gè)數(shù)= m。但是根節(jié)點(diǎn)是例外的,根節(jié)點(diǎn)可以最少有2個(gè)子節(jié)點(diǎn)。
2,每個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn)的個(gè)數(shù),比該節(jié)點(diǎn)中保存的關(guān)鍵字的個(gè)數(shù)多1. 也就是,當(dāng)節(jié)點(diǎn)中保存k個(gè)關(guān)鍵字時(shí),該節(jié)點(diǎn)會(huì)有k + 1個(gè)子節(jié)點(diǎn)(子樹)。
3,每個(gè)節(jié)點(diǎn)中的k個(gè)關(guān)鍵字是按照從小到到排列的,分別記為k1,k2,k3,......kk。那么該節(jié)點(diǎn)會(huì)有k+1個(gè)指針,記為p0,p1,p2,......pk。并且,p3所指向的子節(jié)點(diǎn)中的所有元素,都大于k3,且都小于k4. 如下圖所示。這一點(diǎn)也比較容易理解和記憶,各個(gè)指針p整好位于關(guān)鍵字k的插空的位置,所以,插空處的指針指向的子節(jié)點(diǎn)的元素的值,就理所當(dāng)然的應(yīng)該大于指針左邊的元素,小于指針右邊的元素。
![](http://img.jbzj.com/file_images/article/201901/201917103125765.png?201907103137)
4,B-樹是嚴(yán)格的平衡查找樹,它的左右子樹的高度是相等的。且葉子節(jié)點(diǎn)處于同一層,并且可以用空節(jié)點(diǎn)表示。
一個(gè)B-樹的例子:
![](http://img.jbzj.com/file_images/article/201901/201917103151517.png?20190710323)
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
您可能感興趣的文章:- MySQL Hash索引和B-Tree索引的區(qū)別
- SQLite中的B-Tree實(shí)現(xiàn)細(xì)節(jié)分析
- bitmap 索引和 B-tree 索引在使用中如何選擇
- B-樹的插入過程介紹
- 基于B-樹和B+樹的使用:數(shù)據(jù)搜索和數(shù)據(jù)庫索引的詳細(xì)介紹
- 淺談MySQL的B樹索引與索引優(yōu)化小結(jié)
- 完整B樹算法Java實(shí)現(xiàn)代碼
- c語言B樹深入理解
- B-樹的刪除過程介紹