最大堆为完全二叉树,采用数组存放数据,父节点的值永远比左右孩子大,但兄弟之间值的大小并不确定。
Heap.h:
#ifndef HEAP_H_INCLUDED
#define HEAP_H_INCLUDED
#include<iostream>
using namespace std;
int const MAX = 20;
template<class T>
class MaxHeap{
private:
T compTree[MAX]; //堆中用来存完全二叉树的数组,MAX 为最多能存的结点数
int num; //实际存放数据的完全二叉树的结点数
public:
MaxHeap(T arr[], int length){ //参数为一个数组,在堆中存放为完全二叉树
num = length;
for(int i = 0; i < num; i ++){
compTree[i] = arr[i];
}
print();
init(); //初始化最大堆
}
void init(){
int i = (num - 2) / 2; //完全二叉树中最后一个不是叶子结点的结点的下标
int index = i;
for(; i >= 0; i --){ //从最后一个不是叶子结点的结点开始向前调整大小顺序,直到根结点
int j = i;
while(j <= ind