7.堆

堆是一種特殊的完全二叉樹

  • 完全二叉樹即除了最後一層其它層都是滿的,且最後一層的數據全部靠左排列。
  • 特殊在,他的每個節點的值都大於等於(或者小於等於)其子樹節點,因此堆又分爲大頂堆和小頂堆。

因爲是完全二叉樹,我們存儲堆的時候一般使用數據來存儲,第一個0號元素留空,這樣的話節點是a[n],左節點就是a[2n],右節點就是a[2n+1],父節點就是a[n/2]。當然不留空也可以,推算父節點的時候總是要先進行-1操作。

堆主要有兩個操作

  • 刪除堆頂元素
  • 插入一個元素

這兩個操作都涉及到了堆化(重新調整,使其滿足堆的特性),刪除堆頂元素我們選擇的是把最後一個元素移到堆頂來,從上而下堆化(比較當前節點和子節點的大小,不滿足則互換位置)。插入一個元素我們選擇把元素插入到最後,然後從下往上堆化(比對當前節點和父節點的大小,不滿足則互換位置)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章