大頂堆性質
堆是一種特殊的完全二叉樹,使用數組存儲二叉樹時,若某個非葉子節點存儲在下標為i的位置,其左右孩子節點分別存儲在下標為2i+1和2i+2的位置。
堆可以分為大頂堆和小頂堆,對大頂堆來說,任意非葉子節點不小於其左右孩子節點,對於小頂堆來說,任意非葉子節點不大於其左右孩子節點。若使用數組存儲大頂堆,則滿足:arr[i] >= arr[2i+1] && arr[i] >=arr[2i+2](i為非葉子節點的在數組中的下標)
構造大頂堆
基本思想:
1、從最后一個非葉子節點開始,逐一比較非葉子節點和其左右孩子節點
2、根據比較結果交換節點
3、因為交換可能導致孩子節點不再滿足大頂堆的性質,所以需要對孩子節點進行調整。
例子:
初始 |
從最后一個非葉子結點開始,分別比較非葉結點和其左右孩子節點的大小。 無需調整 |
無需調整 |
無需調整 |
需要交換元素 |
無需調整 |
交換元素位置 |
![]() |
交換后可能造成被交換的孩子節點不滿足堆的性質,因此每次交換后需要重新對交換的孩子節點進行調整。 |
![]() |
![]() |
![]()
|
![]() |
![]() |
大頂堆建立完成 |
