天天看點

資料結構(六)查找---多路查找樹(2-3樹)

前提

多路查找樹-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樹)

(二)2-3樹的插入實作(含分裂)

(1)對于空樹,插入一個2節點即可;      
(2)插入節點到一個2節點的葉子上。由于本身就隻有一個元素,是以隻需要将其更新為3節點即可。      
資料結構(六)查找---多路查找樹(2-3樹)
(3)插入節點到一個3節點的葉子上。因為3節點本身最大容量,是以需要拆分,且将樹中兩元素或者插入元素的三者中選擇其一向上移動一層。 (複雜,分情況)      

三種情況:

1)更新父節點      
資料結構(六)查找---多路查找樹(2-3樹)
2)更新根節點 (一條路上的父節點都變為3結點,隻有去找根)      
資料結構(六)查找---多路查找樹(2-3樹)
3)增加樹高度(當我們根節點也變為3結點後,我們就要去更新樹的高度)      
資料結構(六)查找---多路查找樹(2-3樹)

(三) 2-3樹的删除實作(含合并)

(1)所删元素位于一個3節點的葉子節點上,直接删除,不會影響樹結構。       
資料結構(六)查找---多路查找樹(2-3樹)
(2)所删元素位于一個2節點上,直接删除,破壞樹結構,是以需要分情況讨論      
資料結構(六)查找---多路查找樹(2-3樹)

分4種情況

1)此節點雙親也是2節點,且擁有一個3節點的右孩子;       
資料結構(六)查找---多路查找樹(2-3樹)
2)此節點的雙親是2節點,它右孩子也是2節點;      
資料結構(六)查找---多路查找樹(2-3樹)
3)此節點的雙親是3節點;       
資料結構(六)查找---多路查找樹(2-3樹)
4)目前樹是一個滿二叉樹,降低樹高;       
資料結構(六)查找---多路查找樹(2-3樹)
(3)所删元素位于非葉子的分支節點。此時按樹中序周遊得到此元素的前驅或後續元素,補位      

分兩種情況

1)分支節點是2節點       
2)分支節點是3節點