二叉堆的本質是一種徹底二叉樹,它分爲兩種類型:最大堆和最小堆spa
最大堆任何一個父節點的值,都大於等於它左右孩子的值,最小堆正好與之相反3d
二叉樹的根節點叫作堆頂code
最大堆和最小堆的特色是:最大堆的堆頂是整個堆中的最大元素,最小堆的堆頂是整個堆中的最小元素blog
對於二叉堆有幾種操做ci
這幾種操做都是基於堆的自我調整rem
咱們以最大堆爲例,分析下堆的自我調整get
二叉堆的節點插入位置是徹底二叉樹的最後一個位置,咱們插入一個新節點,值爲11
。it
這時候,咱們讓節點11
和父節點5
做比較,若是11
大於5
,則交換他倆交換位置,稱爲「上浮」class
繼續用節點11
和父節點8
進行比較,若是節點11
大於節點8
,則讓節點11
繼續「上浮」二叉樹
繼續比較,最終讓節點11
上浮到堆頂位置
二叉樹刪除節點的過程和插入過程正好相反,它每次都是從堆頂刪除,將堆頂的節點與與最後一個節點交換位置
而後將堆頂的節點5
和它兩個孩子進行比較,顯然節點10
比較打,讓他倆交換位置,稱爲「下沉」
繼續讓節點5
和它的孩子作比較,顯然大的是節點8
,讓節點5
繼續下沉
此時就從新構建的二叉樹。
構建二叉樹,就是把一個無序的徹底二叉樹調整爲二叉堆,本質上就是讓全部非葉子節點一次下沉(上浮)
文章:什麼是二叉堆?