2-3-4查詢樹指的是一顆空樹或者所有節點是由以下三種節點總成的多路查詢樹:
2-3-4 樹指的是完美平衡的2-3-4 搜尋樹,它具有以下特性:
所以相對於二叉搜尋樹,2-3-4樹保證了相關操作在最壞情況下仍然是對數級別的複雜度,下面詳細的說明2-3-4樹的各種操作。
查詢操作
查詢操作從根節點開始
插入操作
插入操作按照查詢操作找到樹的最底層要插入的葉子節點,如果葉子節點是2-節點或3-節點時,直接插入,如下所示:
那麼葉子節點是4-節點時,該怎麼辦?有兩種處理方式
自頂而下的插入
自頂而下的插入指的是在我們自上而下查詢待插入節點的時候,只要遇到4-節點,則將4-節點拆分為3個2-節點(預**),這三個而節點的父節點跟該4-節點的父節點合併(根節點沒有父節點,是個例外)。這樣可以確保我們遇到的每個4-節點的父節點都不是4-節點(整個查詢路徑自上而下都沒有4-節點),同時保證了最終查詢到的底層葉子節點不是4-節點。如下所示:
自頂而下的插入可能會產生一些不必要的拆分
自底而上的插入
自底而上的插入指的是查詢到底部的待插入節點以後,如果是待插入節點是4-節點,則拆分該4-節點為三個2-節點,並將三個2-節點的父節點插入原先4-節點的父節點,如果父節點是4-節點,則插入前需要拆分,如此依次往上,直到沒有需要拆分的節點,如果根節點產生拆分,則樹的高度加一。如下所示:
自底而下的插入會產生回溯操作,但是產生的拆分較少
刪除操作
刪除操作的第一步就是查詢刪除鍵所在的節點,根查詢操作完全相同
自上而下調整(預合併)
自上而下調整指的是,在查詢待刪除鍵所在節點的同時(包括查詢後繼節點的過程),通過調整結構保證當前節點一定不是2-節點,如此則在查詢到葉子節點後,可以直接刪除鍵。如果當前節點已經是3-節點或-4節點,則繼續查詢,否則按照以下策略進行調整(根節點除外):
如下所示:
自下而上調整
自下而上調整指的是,查詢待刪除的鍵所在的節點時(包括查詢後繼節點)不進行調整,而是在查詢到對應的葉子節點後再進行調整,根自下而上的插入一樣會產生一些回溯,但是相應的調整操作會變少。如果待刪除的葉子節點是2-節點,則按照優先嘗試從兄弟節點「偷」鍵,其次嘗試從父節點「偷」鍵的原則,按照以下策略進行調整:
從2-3-4樹到紅黑樹
維基百科:2-3-4樹
資料結構 2 3 4樹與紅黑樹
前面講到了2 3樹,2 3樹是允許節點最多有三個子節點的樹,2 3樹中有2節點和3節點,2節點跟普通的二叉樹節點一樣,3節點ab就是的左子樹上的所有節點的值小於a,中子樹上所有節點的值大於a而小於b,右子樹上節點的值大於b。2 3樹是一種平衡樹。2 3 4樹跟2 3樹差不多,只不過是把節點的最大子節...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...
紅黑樹下 紅黑樹的實現
1.實現紅黑樹的基本思想 實際上,紅黑樹是有固定的平衡過程的 遇到什麼樣的節點分布,我們就對應怎麼去調整。只要按照這些固定的調整規則來操作,就能將乙個非平衡的紅黑樹調整成平衡的。首先,我們需要再來看一下紅黑樹的定義 在插入 刪除節點的過程中,第 三 四點要求可能會被破壞,所以 平衡調整 實際上就是把...