Java数据结构——2-3树
定義
2-3樹是平衡的3路查找樹,其中2(2-node)是指擁有兩個(gè)分支的節(jié)點(diǎn),3(3-node)是指擁有三個(gè)分支的節(jié)點(diǎn)。B-樹是一種平衡的多路查找樹,2-3樹屬于b-樹,其也同樣具有B-樹的性質(zhì),如m階B-樹,節(jié)點(diǎn)至多有m個(gè)分支、m-1個(gè)關(guān)鍵字;內(nèi)部節(jié)點(diǎn)的分支數(shù)至少為m/2取上限;所有葉節(jié)點(diǎn)都出現(xiàn)在同一層次上,并且不帶任何信息(這是由構(gòu)造樹的邏輯決定的,實(shí)際上指向這些節(jié)點(diǎn)的引用為null)。
2-3查找樹的定義如下:
1 對(duì)于2節(jié)點(diǎn),該節(jié)點(diǎn)保存一個(gè)key及對(duì)應(yīng)value,以及兩個(gè)指向左右節(jié)點(diǎn)的節(jié)點(diǎn),左節(jié)點(diǎn)也是一個(gè)2-3節(jié)點(diǎn),所有的值都比key有效,有節(jié)點(diǎn)也是一個(gè)2-3節(jié)點(diǎn),所有的值比key要大。
2. 對(duì)于3節(jié)點(diǎn),該節(jié)點(diǎn)保存兩個(gè)key及對(duì)應(yīng)value,以及三個(gè)指向左中右的節(jié)點(diǎn)。左節(jié)點(diǎn)也是一個(gè)2-3節(jié)點(diǎn),所有的值均比兩個(gè)key中的最小的key還要小;中間節(jié)點(diǎn)也是一個(gè)2-3節(jié)點(diǎn),中間節(jié)點(diǎn)的key值在兩個(gè)跟節(jié)點(diǎn)key值之間;右節(jié)點(diǎn)也是一個(gè)2-3節(jié)點(diǎn),節(jié)點(diǎn)的所有key值比兩個(gè)key中的最大的key還要大。
?
插入
永遠(yuǎn)都是在葉節(jié)點(diǎn)處插入新節(jié)點(diǎn),當(dāng)3-node變?yōu)?-node時(shí),需要拆分節(jié)點(diǎn),此時(shí)樹高就有可能增加。
刪除
刪除節(jié)點(diǎn)比插入節(jié)點(diǎn)麻煩一些,先來看刪除底部節(jié)點(diǎn),在搜索過程中就需要對(duì)節(jié)點(diǎn)做相應(yīng)的變化,以保證搜索路徑上的都是3-node或臨時(shí)的4-node,在刪除當(dāng)前節(jié)點(diǎn)T時(shí),T一定是3-node或4-node,就可以安全刪除了,刪除之后樹的變化規(guī)則與插入一致。刪除其他節(jié)點(diǎn)可以轉(zhuǎn)化為刪除底部節(jié)點(diǎn),只需要將刪除元素與底部節(jié)點(diǎn)元素交換即可。
總結(jié)
2-3樹作為一種平衡查找樹,查詢效率比普通的二叉排序樹要穩(wěn)定許多,其操作邏輯也非常清晰。2-3樹可以采用紅黑樹實(shí)現(xiàn),使用二叉樹結(jié)構(gòu)從邏輯上模擬了2-3樹,在插入刪除節(jié)點(diǎn)時(shí),又具有二叉平衡樹的便利。
轉(zhuǎn)載于:https://www.cnblogs.com/ericz2j/p/10750893.html
總結(jié)
以上是生活随笔為你收集整理的Java数据结构——2-3树的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ-2298|区间dp|线段树
- 下一篇: 深入理解Java虚拟机——第十二章——J