[英]Deletion of the leaf node from B-tree
我參考了Thomas H Cormen的《算法導論-第 3 版》這本書,他解釋得很好。 以下是包含所有案例的 3 個步驟。希望對您有所幫助。
如果鍵 k 在節點 x 中並且 x 是葉子,則從 x 中刪除鍵 k。
如果鍵 k 在節點 x 中並且 x 是內部節點,請執行以下操作:
a. 如果節點 x 中 k 之前的子節點 y 至少有 t 個鍵,則在以 y 為根的子樹中找到 k 的前驅 k'。 遞歸刪除k0,並用x中的k'替換k。 (我們可以找到 k0 並在一次向下傳遞中將其刪除。)
灣如果 y 的鍵少於 t 個,則對稱地檢查節點 x 中 k 之后的子節點 z。 如果 z 至少有 t 個鍵,則在以 z 為根的子樹中找到 k 的后繼 k'。 遞歸刪除k',並用x中的k'替換k。 (我們可以找到 k' 並在一次向下傳遞中將其刪除。)
C. 否則,如果 y 和 z 都只有 t-1 個鍵,則將 k 和所有 z 合並到 y 中,這樣 x 就會丟失 k 和指向 z 的指針,而 y 現在包含 2t-1 個鍵。 然后釋放 z 並從 y 中遞歸刪除 k。
如果內部節點 x 中不存在鍵 k,則確定必須包含 k 的適當子樹的根 x.ci,如果 k 根本不在樹中。 如果 x.ci 只有 t-1 個鍵,則根據需要執行步驟 3a 或 3b,以確保我們下降到至少包含 t 個鍵的節點。 然后通過對 x 的適當子級進行遞歸來完成。
a. 如果 x.ci 只有 t-1 個鍵,但有至少 t 個鍵的直接兄弟,通過將鍵從 x 向下移動到 x.ci,將鍵從 x.ci 的緊鄰左側移動或右兄弟向上移動到 x,並將適當的子指針從兄弟移動到 x.ci。
灣如果 x.ci 和 x.ci 的兩個直接兄弟都有 t-1 個鍵,則將 x.ci 與一個兄弟合並,這涉及將一個鍵從 x 向下移動到新的合並節點,以成為該節點的中間鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.