1. 程式人生 > 實用技巧 >2-3樹的插入和刪除原理

2-3樹的插入和刪除原理

2-3樹

多路查詢樹
2-節點,含有一個值和兩條連結
3-節點,含有兩個值和三條連結
所有葉子必須都在同一層次

插入原理

情況一 空樹

建立一個二節點作為根節點即可

情況二 二節點的葉子節點

插入3: 直接插入,將該二節點變為三節點即可

情況三 三節點的葉子節點 ( 父節點為二節點 )

插入5: 
1.根據左小右大,5應該插到6的左邊,但是6所在的節點已經是三節點,且由於葉子節點必須要在同一層次(不能單獨往下延伸)
2.不能夠往下走,那就只能往上走,且父節點是二節點可擴充套件為三節點
3.將擴充套件節點的右節點的最左元素6上移,調整葉子節點(結果如圖)

情況四 三節點的葉子節點 ( 父節點為三節點 )

插入11:
1.根據數值應該插入到10的右邊,但10所在的節點已經為三節點了,同時其父節點也為三節點
2.繼續往上找,父節點的父節點為二節點可擴充套件
3.將擴充套件的節點的右節點的最左元素12上移
4.9,10,11按照中序遍歷的方式調整

情況五 三節點的葉子節點 ( 父節點及其以上均為三節點 )

插入2:
1.按照數值大小,應該插入到1的右邊,但1所在節點及其上面的所有節點都是三節點了,擠不下了,這時候就要增加高度了
2.從下往上拆,最後全部節點都變為二節點

刪除原理

情況一 刪除元素所在節點是三節點

直接刪除,將三節點變為二節點即可

情況二 刪除元素位於二節點 ( 父節點為二節點 , 右孩子為三節點)

刪除1:
1.刪掉1
2.左旋轉,將4放到1所在的位置,6放到4所在的位置

情況三 刪除元素位於二節點 ( 父節點為二節點 , 右孩子也為二節點)

刪除4:
1.首先要知道一點:圖中7是根節點的直接前繼,根節點的直接後繼則是9
2.將後繼9拿過來幫忙,放到8的位置,8則去左邊幫忙,放到7的位置(本質也是左旋)
3.6,7也左旋調整

情況四 刪除元素位於二節點 ( 父節點為三節點 )

刪除10:
1.將父節點由三節點變為二節點
2.擴充套件原先父節點的中間節點

情況五 滿二叉樹的時候刪除

如圖,節點均為二節點
刪除8:
1.思路與上面插入的情況五相反,所有節點都不能拆分了,那就擴大寬度縮小一層

情況六 刪除的節點不是葉子節點 ( 刪除節點右孩子為三節點 )

刪除4:
1.右孩子最左元素上移即可
2.右孩子變為二節點

其餘刪除非葉子節點的情況處理方法類似,就不贅述了