二叉堆(完全二叉樹)

2021-08-15 12:48:08 字數 1114 閱讀 7133

最小堆的實現**:

/* 

* 最小堆是一顆完全二叉樹(這裡用陣列實現完全二叉樹)

* 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個結點的二叉樹稱為滿二叉樹。說明 除葉子結點外的所有結點均有兩個子結點。所有葉子結點必須在同一層上。完全二叉樹 若設二叉樹的深度...