B樹可以理解為二叉搜索樹辞做,只不過二叉搜索樹每個(gè)節(jié)點(diǎn)只有一個(gè)數(shù)字,B數(shù)有多個(gè)數(shù)字。
B樹:
B+樹:
B樹與B+樹的區(qū)別
B樹每個(gè)節(jié)點(diǎn)都存儲(chǔ)數(shù)據(jù)贮缅,所有節(jié)點(diǎn)組成這棵樹。B+樹只有葉子節(jié)點(diǎn)存儲(chǔ)數(shù)據(jù)(B+數(shù)中有兩個(gè)頭指針:一個(gè)指向根節(jié)點(diǎn)介却,另一個(gè)指向關(guān)鍵字最小的葉節(jié)點(diǎn))谴供,葉子節(jié)點(diǎn)包含了這棵樹的所有數(shù)據(jù),所有的葉子結(jié)點(diǎn)使用鏈表相連齿坷,便于區(qū)間查找和遍歷桂肌,所有非葉節(jié)點(diǎn)起到索引作用。
B樹中葉節(jié)點(diǎn)包含的關(guān)鍵字和其他節(jié)點(diǎn)包含的關(guān)鍵字是不重復(fù)的永淌,B+樹的索引項(xiàng)只包含對(duì)應(yīng)子樹的最大關(guān)鍵字和指向該子樹的指針崎场,不含有該關(guān)鍵字對(duì)應(yīng)記錄的存儲(chǔ)地址。
B樹中每個(gè)節(jié)點(diǎn)(非根節(jié)點(diǎn))關(guān)鍵字個(gè)數(shù)的范圍為m/2(向上取整)-1,m-1遂蛀,并且具有n個(gè)關(guān)鍵字的節(jié)點(diǎn)包含(n+1)棵子樹谭跨。B+樹中每個(gè)節(jié)點(diǎn)(非根節(jié)點(diǎn))關(guān)鍵字個(gè)數(shù)的范圍為m/2(向上取整),m,具有n個(gè)關(guān)鍵字的節(jié)點(diǎn)包含(n)棵子樹李滴。
B+樹中查找螃宙,無論查找是否成功,每次都是一條從根節(jié)點(diǎn)到葉節(jié)點(diǎn)的路徑所坯。
B樹的優(yōu)點(diǎn):
1.B樹的每一個(gè)節(jié)點(diǎn)都包含key和value污呼,因此經(jīng)常訪問的元素可能離根節(jié)點(diǎn)更近,因此訪問也更迅速包竹。
B+樹的優(yōu)點(diǎn):
- 所有的葉子結(jié)點(diǎn)使用鏈表相連,便于區(qū)間查找和遍歷籍凝。B樹則需要進(jìn)行每一層的遞歸遍歷周瞎。相鄰的元素可能在內(nèi)存中不相鄰,所以緩存命中性沒有B+樹好饵蒂。
- b+樹的中間節(jié)點(diǎn)不保存數(shù)據(jù)声诸,能容納更多節(jié)點(diǎn)元素。