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.右孩子變為二節點

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM