堆是什么?
它是一種樹形組織,使我們能迅速確定包含最大值(或最小值)的結點。
具體來說,堆是一顆左平衡的二叉樹。隨着結點的增加,樹會逐級從左到右增長。
(左平衡是指,如果一棵平衡樹的最后一層的所有葉子結點都在最靠左邊的位置上,則稱這棵樹是左平衡的。)
順序特點
堆狀態的二叉樹是“局部有序”的,任何一個結點與其兄弟結點之間都沒有必然的順序關系,但它與其父子結點有大小順序關系。
堆的分類
最大值堆:子結點比父結點小,根結點是樹中最大的結點。
最小值堆:子結點比父結點大,根結點是樹中最小的結點。
表示方式
對於堆來講,比較好的表示左平衡二叉樹的方式是,將結點通過“層級(水平)遍歷”的方式連續存儲到一個數組中。
假設i是樹中的某一結點,
其父結點位於(i-1)/2處(忽略小樹部分);
左子結點位於2i+1處;
右子結點位於2i+2處;
這樣的組織結構或方式對於堆來說非常重要,通過它我們能迅速定義堆的最后一個結點,最后一個結點指處於樹中最深層最右端的結點。