數(shù)據(jù)結(jié)構(gòu):堆(Heap)

堆就是用數(shù)組實(shí)現(xiàn)的二叉樹

所有它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點(diǎn)的位置。

堆的常用方法:

? ? ?構(gòu)建優(yōu)先隊(duì)列

? ? 支持堆排序

? ? 快速找出一個集合中的最小值(或者最大值)

堆屬性

堆分為兩種:最大堆最小堆,兩者的差別在于節(jié)點(diǎn)的排序方式。

在最大堆中,父節(jié)點(diǎn)的值比每一個子節(jié)點(diǎn)的值都要大。在最小堆中,父節(jié)點(diǎn)的值比每一個子節(jié)點(diǎn)的值都要小。這就是所謂的“堆屬性”,并且這個屬性對堆中的每一個節(jié)點(diǎn)都成立。

例子:

這是一個最大堆,,因?yàn)槊恳粋€父節(jié)點(diǎn)的值都比其子節(jié)點(diǎn)要大。10比7和2都大。7比5和1都大。

根據(jù)這一屬性,那么最大堆總是將其中的最大值存放在樹的根節(jié)點(diǎn)。而對于最小堆,根節(jié)點(diǎn)中的元素總是樹中的最小值。堆屬性非常的有用,因?yàn)槎殉31划?dāng)做優(yōu)先隊(duì)列使用,因?yàn)榭梢钥焖俚脑L問到“最重要”的元素。

注意:堆的根節(jié)點(diǎn)中存放的是最大或者最小元素,但是其他節(jié)點(diǎn)的排序順序是未知的。例如,在一個最大堆中,最大的那一個元素總是位于 index 0 的位置,但是最小的元素則未必是最后一個元素。--唯一能夠保證的是最小的元素是一個葉節(jié)點(diǎn),但是不確定是哪一個。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 堆就是用數(shù)組實(shí)現(xiàn)的二叉樹,所以它沒有使用父指針或者子指針。堆根據(jù)“堆屬性”來排序,“堆屬性”決定了樹中節(jié)點(diǎn)的位置。...
    唐先僧閱讀 249,958評論 21 252
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,179評論 1 92
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,356評論 0 2
  • 1)這本書為什么值得看: Python語言描述,如果學(xué)的Python用這本書學(xué)數(shù)據(jù)結(jié)構(gòu)更合適 2016年出版,內(nèi)容...
    孫懷闊閱讀 12,934評論 0 15
  • 感謝老師分享,讓我學(xué)會如何去發(fā)朋友圈,怎樣和朋友圈的人去互動點(diǎn)贊。想要好好的賣產(chǎn)品,前提是自己的人品更重要。好好聽...
    A漂亮寶貝閱讀 176評論 0 0

友情鏈接更多精彩內(nèi)容