在這裡我們將瞭解如何從 B 樹中刪除節點。假設我們有一個如下所示的 B 樹:B 樹示例 - 刪除分為兩個部分。首先,我們必須找到元素。該策略類似於查詢。現在,對於刪除,我們必須注意一些規則。一個節點必須至少有 m/2 個元素。因此,如果我們刪除一個元素,並且它剩餘的元素少於 m-1 個,那麼它將進行自我調整。如果整個節點都被刪除,則其子節點將被合併,如果其大小與 m 相同,則將其拆分... 閱讀更多
在這裡我們將瞭解什麼是區間堆。區間堆是完全二叉樹,其中除最後一個節點外,每個節點都包含兩個元素。設節點 P 中兩個元素的優先順序為“a”和“b”。這裡我們考慮 a ≤ b。我們說節點 P 表示閉區間 [a, b]。這裡 a 是 P 區間的左端點,b 是右端點。[c, d] 包含在區間 [a, b] 中,當且僅當 a ≤ c ≤ d ≤ b。在一個... 閱讀更多
在這裡我們將瞭解不同的最大 WBLT 操作。HBLT 有不同的操作,如插入、刪除和初始化。它們與 WBLT 也非常相似。但是,合併操作可以在單個自頂向下的過程中完成。WBLT 可以進行單程合併操作。因為我們可以在向下過程中找到 w 值。我們可以更新 w 值並根據需要交換子樹。對於 HBLT,我們無法在向下遍歷樹的過程中找到 s 值。由於合併可以在單個自頂向下的過程中完成,那麼插入和刪除... 閱讀更多
在這裡我們將瞭解左偏樹的另一種變體。在這裡,我們將考慮子樹中的節點數,而不是從根節點到外部節點的最短路徑的長度。在這裡,我們將定義節點 x 的權重 w(x),為以 x 為根的子樹中的內部節點數。如果 x 是外部節點,則權重為 0。如果 x 是內部節點,則權重比其子節點權重之和多 1。這是一個權重偏左樹 (WBLT) 的示例:假設二叉樹是... 閱讀更多
從最大或最小 HBLT 中刪除任意節點不是優先順序佇列或 HBLT 的標準操作。如果我們想從 HBLT 中刪除一個節點,例如 K,我們必須遵循以下規則。將以 K 為根的子樹從樹中分離,並將其替換為 K 節點子樹的合併。更新從 K 到根的路徑上的 s 值,並根據需要在這條路徑上交換子樹以保持 HBLT 的屬性。要更新從 K 到根的 s 值,我們需要每個節點的父節點指標。此更新 s 的操作... 閱讀更多
合併策略很容易使用遞迴來完成。假設 A 和 B 是兩個將要合併的 HBLT。如果其中一個為空,則只需將另一個作為最終結果。如果沒有空 HBLT,則我們必須比較兩個根節點中的元素。具有較大元素的根節點將成為合併後的 HBLT 的根節點。假設 A 具有更大的根節點。並且它的左子樹是 L。假設 C 是由 A 的右子樹和 HBLT B 合併產生的最大 HBLT。最終的 HBLT 將以 A 為根節點,... 閱讀更多