1、概念:B樹和平衡二叉樹稍有不同的是B樹屬於多叉樹又名平衡多路查找樹(查找路徑不只兩個),數據庫索引技術裏大量使用者B樹和B+樹的數據結構,讓我們來看看他有什麼特點;
2、規則:
(1)樹種的每個節點最多擁有m個子節點且m>=2,空樹除外(注:m階代表一個樹節點最多有多少個查找路徑,m階=m路,當m=2則是2叉樹,m=3則是3叉);
(2)除根節點外每個節點的關鍵字數量大於等於ceil(m/2)-1個小於等於m-1個,非根節點關鍵字數必須>=2;(注:ceil()是個朝正無窮方向取整的函數 如ceil(1.1)結果爲2)
(3)所有葉子節點均在同一層、葉子節點除了包含了關鍵字和關鍵字記錄的指針外也有指向其子節點的指針只不過其指針地址都爲null對應下圖最後一層節點的空格子
(4)如果一個非葉節點有N個子節點,則該節點的關鍵字數等於N-1;
(5)所有節點關鍵字是按遞增次序排列,並遵循左小右大原則;
最後我們用一個圖和一個實際的例子來理解B樹(這裏爲了理解方便我就直接用實際字母的大小來排列C>B>A)
3、B樹的查詢流程: 如上圖我要從上圖中找到E字母,查找流程如下
(1)獲取根節點的關鍵字進行比較,當前根節點關鍵字爲M,E要小於M(26個字母順序),所以往找到指向左邊的子節點(二分法規則,左小右大,左邊放小於當前節點值的子節點、右邊放大於當前節點值的子節點);
(2)拿到關鍵字D和G, D< E< G 所以直接找到D和G中間的節點;
(3)拿到E和F,因爲E=E 所以直接返回關鍵字和指針信息(如果樹結構裏面沒有包含所要查找的節點則返回null);
4、B樹的插入節點流程
定義一個5階樹(平衡5路查找樹;),現在我們要把3、8、31、11、23、29、50、28 這些數字構建出一個5階樹出來;
遵循規則:
(1)當前是要組成一個5路查找樹,那麼此時m=5,關鍵字數必須大於等於cei(5/2)小於等於5-1(關鍵字數小於cei(5/2) -1就要進行節點合併,大於5-1就要進行節點拆分,非根節點關鍵字數>=2);
(2)滿足節點本身比左邊節點大,比右邊節點小的排序規則;
5、B樹節點的刪除
規則:
(1)當前是要組成一個5路查找樹,那麼此時m=5,關鍵字數必須大於等於cei(5/2)-1,小於等於5-1,非根節點關鍵字數大於2;
(2)滿足節點本身比左邊節點大,比右邊節點小的排序規則;
(3)關鍵字數小於二時先從子節點取,子節點沒有符合條件時就向向父節點取,取中間值往父節點放;
3、特點:
B樹相對於平衡二叉樹的不同是,每個節點包含的關鍵字增多了,特別是在B樹應用到數據庫中的時候,數據庫充分利用了磁盤塊的原理(磁盤數據存儲是採用塊的形式存儲的,每個塊的大小爲4K,每次IO進行數據讀取時,同一個磁盤塊的數據可以一次性讀取出來)把節點大小限制和充分使用在磁盤快大小範圍;把樹的節點關鍵字增多後樹的層級比原來的二叉樹少了,減少數據查找的次數和複雜度;
原文鏈接:https://zhuanlan.zhihu.com/p/27700617
摘取的部分內容