Heap 是一種特別的完全二元樹(Complete Binary Tree),在一顆二元樹中,若除最後一層外的其他層都是充滿節點的,並且最後一層要麼是滿的,要麼在右邊缺少連續若干節點,則此二元樹為完全二元樹。
堆積還可以分成兩種 :
假設二元堆積的值用陣列儲存,i 是母節點 x 的索引,則 :
範例圖示:
例如節點 19 的索引 1,其左右子節點分別為 3, 4。
這邊分享一個 Binary Heap 的動畫,從動畫可以更清楚瞭解資料節點是怎麼更新的。
這裡以 Max heap 為例 :
上面幾項功能的實作程式碼可以在這個 Github repo javascript-data-structure/Heap 找到!
參考 堆積 Wiki