【閱讀筆記】——什麼是二叉堆

什麼是二叉堆

二叉堆的本質是一種徹底二叉樹,它分爲兩種類型:最大堆和最小堆spa

最大堆任何一個父節點的值,都大於等於它左右孩子的值,最小堆正好與之相反3d

二叉樹的根節點叫作堆頂code

最大堆和最小堆的特色是:最大堆的堆頂是整個堆中的最大元素,最小堆的堆頂是整個堆中的最小元素blog

堆的自我調整

對於二叉堆有幾種操做ci

  • 插入節點
  • 刪除節點
  • 構建二叉堆

這幾種操做都是基於堆的自我調整rem

咱們以最大堆爲例,分析下堆的自我調整get

插入節點

二叉堆的節點插入位置是徹底二叉樹的最後一個位置,咱們插入一個新節點,值爲11it

這時候,咱們讓節點11和父節點5做比較,若是11大於5,則交換他倆交換位置,稱爲「上浮」class

繼續用節點11和父節點8進行比較,若是節點11大於節點8,則讓節點11繼續「上浮」二叉樹

繼續比較,最終讓節點11上浮到堆頂位置

刪除節點

二叉樹刪除節點的過程和插入過程正好相反,它每次都是從堆頂刪除,將堆頂的節點與與最後一個節點交換位置

而後將堆頂的節點5和它兩個孩子進行比較,顯然節點10比較打,讓他倆交換位置,稱爲「下沉」

繼續讓節點5和它的孩子作比較,顯然大的是節點8,讓節點5繼續下沉

此時就從新構建的二叉樹。

構建二叉樹

構建二叉樹,就是把一個無序的徹底二叉樹調整爲二叉堆,本質上就是讓全部非葉子節點一次下沉(上浮)

  • 構建最大堆:節點大的上浮,小的下沉
  • 構建最小堆:節點小的上浮,大的下沉

文章:什麼是二叉堆?

相關文章
相關標籤/搜索