首先我們需要明確一點:2023年,r.bayer和e.mccreight提出了一種適用於外查詢的樹
,它是一種平衡的多叉樹,稱為b樹(或b-樹、b_樹)。所以我們現在所說的b樹和b-樹其實指的是同乙個東西。在這裡我們就稱它為b樹吧。
首先我們定義b樹的階:b樹中所有節點中孩子節點個數的最大值,通常我們用m表示(m >= 3),成為m階b樹。
那麼我們就不得不提一下2-3樹是什麼東西了,2-3樹其實就是最簡單的b樹,每個非葉子節點都有2-3個孩子節點,所以2-3和3階b樹是同乙個東西。m階b樹所滿足一下的性質。
1)每個節點最多有m個分支(子樹),除根節點和葉子節點之外的節點最少都應該含有ceil(m/2)個分支(ceil表示向上取整),所以非根非葉子的分支的數量範圍為[ ceil(m/2),m]。根節點最少可以有兩個分支
。如果說有乙個這樣的說法:
b-樹中乙個關鍵字只能在樹中某乙個節點上出現,且節點內部關鍵字是有序排列的。這個說法是正確的。
4)b樹中的葉子節點都是處在同一層中,一般都是用空指標表示,表示查詢失敗。
說明:此圖中的葉子節點在最後連線的下方,第三層不是葉子節點
我們結合上面的這個來詳細的說明一下b樹的基本概念。首先我們可以看到這課b樹的階數是3,稱為3階b樹,那麼它除了根節點個葉子節點分支的數量範圍就是
[2,3]
([ceil(m/2),m]),
[1,2]
([ceil[m/2]-1,m-1])
。葉子節點都是在第四層,表示不成功的查詢。
3)如果最後遇到空指標,則證明查詢不成功。
我們拿上面的二叉樹進行一下演示,假設我們要查詢 元素p 和 元素z :
上圖表示的是查詢元素p的過程,最後查詢到了結果。
我們查詢元素z,每次都找到元素所存在的位置,然後一路往西,最後到了葉子節點,成空了,表示查詢失敗,這個b樹中沒有這個元素。
我們就新建一棵b樹,以關鍵序列建立一棵5階b樹。
3)然後我們繼續進行插入,,直到插入元素的時候我們又會發現過度富裕的節點,然後同樣需要我們將中間節點給它的父親。
4)最後我們得到了我們的5階b樹。
在插入時,我們還有時會遇到另外一種情況:父親節點已經到達上限,但是它的子節點中又含有乙個過度富裕的,那麼我們應該怎麼辦.......
例:
我們在這裡面插入元素
這樣我們的b樹插入的操作經說的差不多了。
注:我們這裡的b樹都沒有畫失配的葉子節點。
來來使這棵樹重新成為b樹。
詳細操作:
首先我們需要知道元素的相近元素:如果某乙個元素存在左右孩子節點的話,那麼他的左孩子中的最大值和右孩子的最小值就是這個
元素的相近節點。
1)第一,我們要在b-樹找到需要刪除的元素的位置,將該節點進行刪除,如果該元素存在相近元素,我們就把相近元素上移到父節
點中,然後進行後面的移動,如果沒有相近節點,那麼我們就直接進行後面的移動。
2)如果某節點中元素個數小於最小的元素數目,首先我們先看看相鄰的兄弟節點是否過得還富裕,如果過的還富裕的話,那麼直接
3)如果相鄰的兄弟節點都是過的十分緊迫,那麼我們就和鄰近的兄弟節點以及乙個父親節點進行合併操作,然後再進行後面的移
動。我們假設開始的b樹是這樣的:
因為元素所在的節點包含三個節點,所以直接刪除不會影響我們5階b樹的性質,所以直接刪除就好。
2)我們刪除節點19,我們發現元素節點之後,節點就不滿足5階b樹的性質了,這時候我們就要看看兄弟節點時候富裕,我們
3)如果我們想要刪除元素應該怎麼辦呢?我們首先將相近元素放到這個元素3所在的位置,於是我們就選取4吧
於是我們首先
得到了這樣的b樹:
然後我們發現有乙個節點只是包含乙個元素,不符合5階b樹的性質,又因為的左右兄弟節點都是剛剛脫貧,又不能向父親節
點借,那麼怎麼辦嘞.....只好進行合併操作了,那麼我們就將含有元素的節點和含有的節點合併成乙個節點,那麼我們就
會得到這樣的b樹:
這樣又出現了乙個節點7,他的相鄰節點也不是十分富裕,我們只好再次向上合併,得到我們最後的5階b樹:
這樣我們的b樹的所有操作就基本完成了。
資料結構 B樹與B 樹
b樹 多路平衡查詢樹 b 樹 由二叉查詢樹進化而來 m叉查詢樹 由分塊查詢進化而來 多級分塊查詢 根節點的關鍵字範圍 1,m 1 根節點的關鍵字範圍 2,m n個關鍵字對應n 1個分支 n個關鍵字對應n個分支 關於分支是一樣的 根節點分支數範圍 2,m 除根節點外,其他節點數範圍 m 2,m 所有節...
經典資料結構 B樹與B 樹
小結 b樹 二叉樹,每個結點只儲存乙個關鍵字,等於則命中,小於走左結點,大於 走右結點 b 樹 多路搜尋樹,每個結點儲存m 2到m個關鍵字,非葉子結點儲存指向關鍵 字範圍的子結點 所有關鍵字在整顆樹 現,且只出現一次,非葉子結點可以命中 b 樹 在b 樹基礎上,為葉子結點增加鍊錶指標,所有關鍵字都在...
資料結構之B樹與B 樹
1970年,提出了一種用於外查詢的樹,名為b樹,b樹是一顆平衡多叉樹,允許乙個節點有多個孩子,b樹也常常稱為m樹,m為乙個節點的子節點數 b樹滿足以下標準特徵 1.根結點至少有兩個子女。2.每個中間節點都包含k 1個元素和k個孩子,其中 m 2 k m 3.每乙個葉子節點都包含k 1個元素,其中 m...