我正在實現最小最大值堆,這是一種雙端優先級隊列。你可以看這裏here關於最小最大堆的更多信息。最小最大堆中的刪除最大值操作
插入和刪除分鐘操作的代碼很簡單,可以在網上獲得。但是,我也試圖在最小 - 最大堆上執行delete-max操作。最初,我覺得min-max堆中的delete-max與max-min堆中的delete-max相同(如果我們考慮包含最大元素的min-max堆的子樹,它類似於max-分鐘堆)。因此,實現將很簡單,類似於min-max堆的delete-min。
但是,有一個問題:
如在上面的圖中可以看出,雖然圖70是最大元件,最後元件(12)的最大 - 最小堆的不包含70的子樹。那麼,我可以用它來代替刪除70後留在左側子樹中的空位嗎?
如果我們不使用該元素,而是遵循最大最小堆的刪除-MAX程序,並使用20來代替差距,插在堆中的下一個元素將是在10和永遠正確的孩子將沒有右邊的孩子9.
那麼,任何人都可以幫助我嗎?
由於關於刪除隨機密鑰的問題與如何在delete-max之後修復堆的問題不同,因此我會考慮將其作爲一個單獨的問題。 – templatetypedef
@templatetypedef編輯此問題以關注「如何刪除最大元素」。現在,您可以在此處找到一個關於「如何從最小 - 最大堆中刪除任何節點」的建議解決方案的具體問題:http://stackoverflow.com/q/39392864/3924118 – nbro