B樹為什麼具有相同的深度?

2021-08-28 08:24:18 字數 1705 閱讀 6984

b樹的**行為導致了b樹具有相同的深度。不過要清楚的知道這一點,要從

節點從0到節點變滿,到第一次有分層,知道深度不斷增大的流程開始,直接上圖:

首先是乙個空的根節點:

然後第一次有了第乙個關鍵字:

由於其節點元素大小不是我的觀察重點,所以用e代替,用\代表空

假如我們的b樹最小度數為t,那麼一直插入關鍵字的話:

先根節點稱為乙個滿節點:

------------------------ 【1-a】 3個關鍵字,所有孩子為空--------------------------

------------------------ 【1-b】 2t-2個關鍵字關鍵字,所有孩子為空。--------------

當節點存在2t-2個關鍵字時,其處在乙個臨近**的狀態,節點在此環境下,

再插入乙個關鍵字,b樹為了方便後續插入,即防止**向上傳播,會將其

預**。

**行為如下,插入了乙個關鍵字,節點滿了2t-1個。(此節點為合法b樹節點)

繼續不斷地新增節點,其中只要當第二層的某個節點等於2t-1關鍵字,其就會給父節點增加乙個關鍵字。(這樣做實際上維持了父節點關鍵字個數n,具有n+1孩子的性質)

最終子節點不斷增多,第一層根節點又有2t-1個了,根節點也要**不過這次多少不一樣,它的孩子域下有子代的,此時的**帶有子代**。

再次觀察**細節(把上面的根節點放大),此時根節點開始**:

其中每個橢圓都是具有t-1個關鍵字葉子節點。

這種**都是按這種方式進行,其實現在就很好理解為什麼葉子節點深度相同。因為b樹不像二叉樹一樣在葉子節點的下面插入,而是就是插入到葉子節點,這樣葉子節點如果有空間,就插了,沒有空間,就**成兩個相同深度的葉子節點,如果父節點也滿了,會繼續父節點也**,直到滿足儲存需求,如果到根節點還沒滿足,就新建乙個根節點,將原來父節點**,深度加一層。而原來父節點是兩個子代域具有相同深度,相同深度的兩個子代域連線乙個父節點,保證其後葉子節點深度相同。

因此,空間夠不夠深度都不變,一開始深度相同,那深度就一致相同了。

為什麼MySQL使用B 樹?

首先需要理解磁碟io的原理 硬碟中一般會有多個碟片組成,每個碟片包含兩個面,每個盤面都對應地有乙個讀 寫磁頭。將磁軌劃分為若干個弧段,每個磁軌上乙個弧段被稱之為乙個扇區 圖踐綠色部分 扇區是磁碟的最小組成單元。硬碟通常由重疊的一組碟片構成,每個盤面都被劃分為數目相等的磁軌,並從外緣的 0 開始編號,...

MySQL為什麼用B 樹,而不用B樹?

面試題1 mysql為什麼用b 樹,而不用b樹?1.b 樹只有葉子節點存資料 b樹是每個節點都存資料 在相同資料量下b樹的高度更高,所以查詢效率更低 2.b樹每一層存的是資料 索引 b 樹是除了葉子節點存的是資料 索引以外,其餘節點只存索引,所以在相同資料量的情況下,b樹的高度會比b 樹高很多 面試...

為什麼Mysql用B 樹做索引而不用B 樹

先從資料結構的角度來答。題主應該知道b 樹和b 樹最重要的乙個區別就是b 樹只有葉節點存放資料,其餘節點用來索引,而b 樹是每個索引節點都會有data域。這就決定了b 樹更適合用來儲存外部資料,也就是所謂的磁碟資料。從mysql inoodb 的角度來看,b 樹是用來充當索引的,一般來說索引非常大,...