1. 程式人生 > 其它 >資料結構與演算法-二叉堆

資料結構與演算法-二叉堆

定義

二叉堆本質上是一種完全二叉樹,它分為兩個型別

  • 大頂堆(最大堆)
    最大堆的任何一個父節點的值,都大於或等於它左、右孩子節點的值

  • 小頂堆(最小堆)
    最小堆的任何一個父節點的值,都小於或等於它左、右孩子節點的值

二叉堆的根節點叫作堆頂
最大堆和最小堆的特點決定了:最大堆的堆頂是整個堆中的最大元素;最小堆的堆頂是整個堆中的最小元素

儲存原理

完全二叉樹比較適合用陣列來儲存。用陣列來儲存完全二叉樹是非常節省儲存空間的。因為我們不需要儲存左右子節點的指標,單純地通過陣列的下標,就可以找到一個節點的左右子節點和父節點。

從圖中我們可以看到,陣列中下標為 i 的節點的左子節點,就是下標為 i∗2 的節點,右子節點就是下標為 i∗2+1 的節點,父節點就是下標為 i/2 取整的節點

典型應用

  1. 優先佇列
  2. 利用堆求 Top K問題
    在一個包含 n 個數據的陣列中,我們可以維護一個大小為 K 的小頂堆,順序遍歷陣列,從陣列中取出資料與堆頂元素比較。如果比堆頂元素大,我們就把堆頂元素刪除,並且將這個元素插入到堆中;如果比堆頂元素小,則不做處理,繼續遍歷陣列。這樣等陣列中的資料都遍歷完之後,堆中的資料就是前 K 大資料了