數據結構之「堆」

堆 是一種特殊的徹底二叉樹結構,一般,它有兩種類型:最小堆 和 最大堆。算法

最小堆(min heap)是父節點的值恆小於等於子節點的值。
數組

最大堆(max heap)是父節點的值恆大於等於子節點的值。 微信

二叉堆的性質

任意節點小於(或大於)它的全部子節點,最小值(或最大值)在堆的根上。
堆老是一棵徹底樹。即除了最底層,其餘層的節點都被元素填滿,且最底層儘量地從左到右填入。cdn

二叉堆的實現

堆的存儲結構blog

堆通常能夠用數組的方式來存儲,數組的順序其實就是堆層級遍歷的結果。排序

堆的插入it

因爲堆是一個徹底二叉樹,每次老是先填滿上一層,再在下一層從左往右依次插入。io

插入步驟:
1.首先將新元素增長到堆的末尾。
2.而後在新元素與其父節點的值比較,若是新元素小於父節點的值則將二者交換位置。
3.不斷進行第2步操做,直到不須要交換元素,或者達到堆頂。class

最後就會獲得一個最小堆,上面交換元素的過程叫作上濾。二叉樹

堆的刪除

堆的刪除和插入操做是剛剛相反的,插入是從下往上調整堆,刪除是從上往下調整堆。

刪除步驟:
1.首先刪除堆頂元素。
2.而後在比較左右子節點,將小的元素上調。
3.不斷進行步驟2,直到不須要調整或者調整到堆底了。

上面交換元素的過程叫作下濾。

總結

堆有兩種類型,最大堆和最小堆,而且堆老是一顆徹底樹。

因爲堆的 父節點的值恆小於等於子節點的值 或者 父節點的值恆大於等於子節點的值,能夠做爲 Top n 使用。

堆(一般是二叉堆)經常使用於排序。這種算法稱做堆排序。

PS:
清山綠水始於塵,博學多識貴於勤。
我有酒,你有故事嗎?
微信公衆號:「清塵閒聊」。
歡迎一塊兒談天說地,聊代碼。

相關文章
相關標籤/搜索