前提
多路查找樹-B樹
普通樹或二叉樹等一個結點隻能存一個元素,比如BST、AVL、紅黑等都是為了記憶體而設計;
B樹每個結點可以有n個元素和n+1個孩子,減少樹的高度,減少樹的度,是以可以降低記憶體讀取外存的次數;( 對二叉查找樹的改進。它的設計思想是,将相關資料盡量集中在一起,以便一次讀取多個資料,減少硬碟操作次數)。
B樹為了 磁盤 或其它 儲存設備 而設計的一種 多叉平衡查找樹;
多路查找樹(muitl-way search tree),其每一個節點的孩子數可以多于兩個,且每一個節點處可以存儲多個元素。主要有4中特殊形式。2-3樹,2-3-4樹,B樹,B+樹
一:2-3樹
(一)定義
其中的每一個節點都具有兩個孩子(稱為2節點)或者三個孩子(稱為3節點)。
并且2-3樹中所有的葉子都在同一層上。
一個2節點包含一個元素和兩個孩子(或者沒有孩子)。
一個3節點包含一小一大兩個元素和三個孩子(或者沒有孩子)。

(二)2-3樹的插入實作(含分裂)
(1)對于空樹,插入一個2節點即可;
(2)插入節點到一個2節點的葉子上。由于本身就隻有一個元素,是以隻需要将其更新為3節點即可。
(3)插入節點到一個3節點的葉子上。因為3節點本身最大容量,是以需要拆分,且将樹中兩元素或者插入元素的三者中選擇其一向上移動一層。 (複雜,分情況)
三種情況:
1)更新父節點
2)更新根節點 (一條路上的父節點都變為3結點,隻有去找根)
3)增加樹高度(當我們根節點也變為3結點後,我們就要去更新樹的高度)
(三) 2-3樹的删除實作(含合并)
(1)所删元素位于一個3節點的葉子節點上,直接删除,不會影響樹結構。
(2)所删元素位于一個2節點上,直接删除,破壞樹結構,是以需要分情況讨論
分4種情況
1)此節點雙親也是2節點,且擁有一個3節點的右孩子;
2)此節點的雙親是2節點,它右孩子也是2節點;
3)此節點的雙親是3節點;
4)目前樹是一個滿二叉樹,降低樹高;
(3)所删元素位于非葉子的分支節點。此時按樹中序周遊得到此元素的前驅或後續元素,補位
分兩種情況
1)分支節點是2節點
2)分支節點是3節點