二叉堆 Heap 的學習

2021-05-24 13:30:45 字數 650 閱讀 4310

定義:在一棵完全二叉樹中,滿足a[parent[i]] <= a[i]

(小根堆為例)。性質1

:parent[i] = i/2; left[i] = i*2; right[i] = i*2+1;性質2

:高度為

h的堆,元素對多

個,最少

個;性質3:含

n個元素的堆的高度為floor(lg n);性質

4:當用陣列表示儲存了

n個元素的堆時,葉子結點的下標是

floor(n/2)+1……n

操作:

1.heapify(int k)

前提條件是其子結點滿足堆的性質,則操作完成後,以該點給根的樹也滿足堆的性質: 2.

decrease(int k)

當乙個元素的值減小時,應該往上冒泡去找適合自己的位置;增加元素可以理解為乙個點的權值從

+infinite

改到了當前值,所以也可以用這個操作; 3.

extract():int

刪除根結點,並返回權值大小 4.

increase(int k)

增加乙個新的結點

5.build(int size)

陣列狀態下以o(n)的複雜度建堆

基本就這些,把這些**熟記於心後,就要具體問題具體處理了!

二叉堆學習總結

二叉堆是一種特殊的堆,二叉堆是完全二元樹 二叉樹 或者是近似完全二元樹 二叉樹 二叉堆有兩種 最大堆和最小堆。最大堆 父結點的鍵值總是 大於或等於 任何乙個子節點的鍵值。最小堆 父結點的鍵值總是 小於或等於 任何乙個子節點的鍵值。二叉堆用陣列儲存,從下標1開始,並且因為二叉堆為完全二叉樹,所以除根節...

heap的一些實現,二叉堆,左式堆,二項佇列

這裡的堆指的都是二叉堆,為了優先佇列產生 優先佇列,使一些特殊的結點在出隊的時候要優先出來。出隊入隊操作變成了insert和delete 堆是乙個完全二叉樹,除了最後一層,其餘層都是滿的。這樣的話儲存用乙個陣列就可以,任乙個元素位置在i,其左兒子位置是2 i,右兒子位置是2 i 1,父結點是i 2向...

二叉堆的實現

include include define max heap size 101 class binaryminheap void insert intvalue void removemin intgetmin void displayheaparray private int heaparray...