最小堆的實現**:
/*
* 最小堆是一顆完全二叉樹(這裡用陣列實現完全二叉樹)
* index: 0 1 2 3 4 5 6
* value: [空] a b c d
* * 任意index,其父親為index/2,左兒子為2*index,右兒子為2*index + 1
* 時間複雜度: o(logn)
*/#include#includeusing namespace std;
templateclass binaryheap
; explicit binaryheap(const vector&items);
bool isempty() const;
const comparable& findmin() const;
void insert(const comparable &x);
void deletemin();
void deletemin(comparable &item);
void makeempty();
private:
int currentsize;
vectorarray;
void buidheap();
void percolatedown(int hole);
};templatevoid binaryheap::insert(const comparable &x)
templatevoid binaryheap::deletemin()
templatevoid binaryheap::deletemin(comparable& minitem)
/*節點下慮*/
templatevoid binaryheap::percolatedown(int hole)
array[hole] = tmp;
}templatebool binaryheap::isempty() const
int main()
二叉堆 完全二叉樹 優先佇列
完全二叉樹的邏輯結構是樹結構,但由於其特殊性,資料結構中常用陣列來儲存.訪問父節點,左子結點,右子節點都很方便 陣列儲存以1為起點 假設有某一結點u a u 2 為其父節點,當且僅當u 1 a u 2 為其左子結點,當且僅當u 2 n a u 2 1 為其右子節點,當且僅當u 2 1 n inclu...
樹 二叉樹 滿二叉樹 完全二叉樹 堆 概念彙總
樹 乙個擁有n 個節點和n 1 條邊的乙個有向無環圖。二叉樹 每個節點最多有兩個子樹的樹結構。滿二叉樹 除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹。完全二叉樹 由滿二叉樹而引出 二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數 滿二叉 樹 第 h...
二叉樹,完全二叉樹,滿二叉樹
二叉樹 是n n 0 個結點的有限集合,它或者是空樹 n 0 或者是由乙個根結點及兩顆互不相交的 分別稱為左子樹和右子樹的二叉樹所組成。滿二叉樹 一顆深度為k且有2 k 1個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...