完全二叉樹:除了最后一行擒贸,其他行都滿的二叉樹干旁,而且最后一行所有葉子節(jié)點(diǎn)都從左向右開始排序。
二叉堆:完全二叉樹的基礎(chǔ)上养渴,加以一定的條件約束的一種特殊的二叉樹。根據(jù)約束條件的不同泛烙,二叉堆又可以分為兩個(gè)類型:
大頂堆和小頂堆理卑。
大頂堆(最大堆):父結(jié)點(diǎn)的鍵值總是大于或等于任何一個(gè)子節(jié)點(diǎn)的鍵值;
小頂堆(最小堆):父結(jié)點(diǎn)的鍵值總是小于或等于任何一個(gè)子節(jié)點(diǎn)的鍵值蔽氨。
一 . 例子
在java.util.concurrent包下
PriorityBlockingQueue優(yōu)先級(jí)阻塞隊(duì)里 底層實(shí)現(xiàn)
核心思想:
? // 位運(yùn)算 右移1位 找到父節(jié)點(diǎn)?
? ? int parent = (k -1) >>>1;
? // 與父節(jié)點(diǎn)進(jìn)行比較 決定上浮或者下沉
源碼截圖: