B樹 B 樹 B 樹 B 樹

2021-08-19 14:38:13 字數 1054 閱讀 4144

b-樹其實就是b樹,因為b樹原文中是b-tree,只是國內很多人把b-tree譯作b-樹,容易令人誤解為b樹和b-樹是兩種樹(博主曾一度這麼認為⊙﹏⊙)

經常見到這個b樹,那麼它的具體結構是什麼呢?

參考演算法導論,b樹其實是和二叉搜尋樹很相似,是一種多路搜尋樹,b樹每個節點可以有多個關鍵字,有多於兩個的子樹,簡單概括其特性

1.每個節點x屬性:

a. x.n,當前儲存節點x的關鍵字個數

b. x.n個關鍵字x.key1, x.key2,..., x.keyn, 以非降序方式存放

c. 每個節點裡有x.n+1個孩子指標x.c1, x.c2, ..., x.cn+1。葉節點沒有孩子,其ci屬性沒有定義

d. x.leaf,布林值,表示該節點是否為葉節點

2.每個葉節點都有相同的高度,即樹的高度

3.每個節點包含的關鍵字個數有上下界,用乙個被稱為b樹的最小度數t>=2來限制。

a.每個節點最少含有t-1個關鍵字(根節點至少乙個),最少含有t個孩子

b.每個節點最多含2t-1個關鍵字,最多含2t個孩子

其他性質(自己簡單歸納的):

1.h<=log[(n+1)/2]/logt;(h為b樹高度,n為關鍵字個數)

2.搜尋某節點時間複雜度t*(logn/logt)

3.插入關鍵字,略有複雜,直接插入後可能節點關鍵字數量可能超過2t-1,不滿足b樹的性質。對於即將插入的節點,若其關鍵字已經飽和(關鍵字數2t-1),將其前後**成兩個t-1個關鍵字的節點,中間節點放入到原節點的父節點中(若父節點也飽和,再往上遍歷)。當根結點滿了**,樹的高度會增加,**是樹長高的唯一途徑

4.刪除關鍵字,更加複雜。若刪除節點為葉子節點,直接刪除,少於t-1個關鍵字再和其他節點合併;若為非葉子節點,刪除後還要從子樹中往上提乙個關鍵字補全到刪除關鍵字的位置...

b樹的一種變體,和b樹基本相同,就是它節點裡關鍵字數和子樹數目相等,且只有葉子節點存了乙個帶資料的鍊錶,故搜尋時必須搜尋至葉子節點才能停止,中途命中也不停止

b+樹的一種改進版,相比b+樹而言非根和非葉子節點增加了兄弟指標,塊的利用率有1/2提公升至2/3

參考:待更新...

B樹,B 樹,B 樹,B 樹

小彰的部落格 b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點...

B樹 B 樹 B 樹 B 樹

b 樹即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left 和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就...

B樹 B 樹 B 樹 B 樹

b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...