2010-05-22 42 views
1

刪除二進制堆中的最小元素後,即刪除根後,我知道必須調整堆以維持堆屬性。 但是,執行此操作的首選方法似乎是將最後一頁分配給根並篩選它。刪除最小元素後重新調整二進制堆

我想知道爲什麼我們不採取過去是根的小孩,只是不斷篩選所有的孩子?這不是相同數量的操作,那麼爲什麼「分配最後一片葉子到根部和篩下」方法更受歡迎?

回答

4

因爲你必須保留最後一行從左邊填滿樹。從上往下篩選,你不能保證你篩選的最後一個元素將是最右邊的元素。

+0

試試看看這樣一個簡單的例子:'[1,3,5,4,6,7]'。如果你將小孩向上移動,你最終會得到一堆:'[3,4,5,X,6,7]'(X是一個洞)。以最後一個元素結束堆看起來像:'[3,4,5,7,6]'。 – Dolphin 2010-05-24 15:23:04