簡體   English   中英

從 B 樹中刪除葉節點

[英]Deletion of the leaf node from B-tree

B樹的葉子節點刪除節點的規則是什么? 我在下面舉了一個例子。 我需要從葉節點中刪除鍵 J、K、U。 B 樹的 't' 是 3。所以節點中的最小鍵數應該是 2。

J 可以毫無問題地刪除。

但是當J被刪除時,剩下的就是K,L。 接下來刪除K時,由於節點包含2個節點,不能直接刪除K。

由於它的兄弟節點 N,O 也包含它的最小節點,我應該在這里執行什么? 是合並嗎?

如何刪除 K 和 U。

請幫忙。

在此處輸入圖片說明

我參考了Thomas H Cormen的《算法導論-第 3 版》這本書,他解釋得很好。 以下是包含所有案例的 3 個步驟。希望對您有所幫助。

  1. 如果鍵 k 在節點 x 中並且 x 是葉子,則從 x 中刪除鍵 k。

  2. 如果鍵 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。

在此處輸入圖片說明

  1. 如果內部節點 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM