1 B樹
在介紹B 樹之前, 先簡單的介紹一下B樹,這兩種數據結構既有相似之處,也有他們的區别,最後,我們也會對比一下這兩種數據結構的區别。
1.1 B樹概念
B樹也稱B-樹,它是一顆多路平衡查找樹。二叉樹我想大家都不陌生,其實,B樹和後面講到的B 樹也是從最簡單的二叉樹變換而來的,并沒有什麼神秘的地方,下面我們來看看B樹的定義。
所以,根節點的關鍵字數量範圍:1 <= k <= m-1,非根節點的關鍵字數量範圍:m/2 <= k <= m-1。
另外,我們需要注意一個概念,描述一顆B樹時需要指定它的階數,階數表示了一個節點最多有多少個孩子節點,一般用字母m表示階數。
我們再舉個例子來說明一下上面的概念,比如這裡有一個5階的B樹,根節點數量範圍:1 <= k <= 4,非根節點數量範圍:2 <= k <= 4。
下面,我們通過一個插入的例子,講解一下B樹的插入過程,接着,再講解一下删除關鍵字的過程。
1.2 B樹插入
插入的時候,我們需要記住一個規則:判斷當前結點key的個數是否小于等于m-1,如果滿足,直接插入即可,如果不滿足,将節點的中間的key将這個節點分為左右兩部分,中間的節點放到父節點中即可。
插入22時,發現這個節點的關鍵字已經大于4了,所以需要進行分裂,分裂的規則在上面已經講了,分裂之後,如下。
分裂,得到下面的。
更過的插入的過程就不多介紹了,相信有這個例子你已經知道怎麼進行插入操作了。
1.3 B樹的删除操作
B樹的删除操作相對于插入操作是相對複雜一些的,但是,你知道記住幾種情況,一樣可以很輕松的掌握的。
此時發現26所在的節點隻有一個元素,小于2個(m/2),這個節點不符合要求,這時候的規則(向兄弟節點借元素):如果删除葉子節點,如果删除元素後元素個數少于(m/2),并且它的兄弟節點的元素大于(m/2),也就是說兄弟節點的元素比最少值m/2還多,将先将父節點的元素移到該節點,然後将兄弟節點的元素再移動到父節點。這樣就滿足要求了。
我們看看操作過程就更加明白了。
移動之後,跟兄弟節點合并。
删除就隻有上面的幾種情況,根據不同的情況進行删除即可。
上面的這些介紹,相信對于B樹已經有一定的了解了,接下來的一部分,我們接着講解B 樹,我相信加上B 樹的對比,就更加清晰明了了。
2 B 樹
2.1 B 樹概述
B 樹其實和B樹是非常相似的,我們首先看看相同點。
不同點。
下面我們看一個B 樹的例子,感受感受它吧!
2.2 插入操作
對于插入操作很簡單,隻需要記住一個技巧即可:當節點元素數量大于m-1的時候,按中間元素分裂成左右兩部分,中間元素分裂到父節點當做索引存儲,但是,本身中間元素還是分裂右邊這一部分的。
下面以一顆5階B 樹的插入過程為例,5階B 樹的節點最少2個元素,最多4個元素。
有了這幾個例子,相信插入操作沒什麼問題了,下面接着看看删除操作。
2.3 删除操作
對于删除操作是比B樹簡單一些的,因為葉子節點有指針的存在,向兄弟節點借元素時,不需要通過父節點了,而是可以直接通過兄弟節移動即可(前提是兄弟節點的元素大于m/2),然後更新父節點的索引;如果兄弟節點的元素不大于m/2(兄弟節點也沒有多餘的元素),則将當前節點和兄弟節點合并,并且删除父節點中的key,下面我們看看具體的實例。
這樣,B 樹的删除操作也就完成了,是不是看完之後,覺得非常簡單!
3 B樹和B 樹總結
B 樹相對于B樹有一些自己的優勢,可以歸結為下面幾點。
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!