二叉堆

来源:互联网 发布:易语言单机游戏源码 编辑:程序博客网 时间:2024/05/22 08:07
#include <cstdio>class Heap{public:int* array;int count;int size;Heap(int size){array=new int[size];this->count=0;this->size=size;}int parent(int i){if(i<=0||i>=this->count){return -1;}return (i-1)/2;}int leftChild(int i){int left=2*i+1;if(left>=this->count){return -1;}return left;}int rightChild(int i){int right=2*i+2;if(right>=this->count){return -1;}return right;}int getMax(){if(count)return this->array[0];return -1;}void down(int i){//i节点不满足堆性质,向下渗透int l,r,max,tmp;l=leftChild(i);r=rightChild(i);if(l!=-1&&this->array[l]>array[i]){//大根堆max=l;}else{max=i;}if(r!=-1&&this->array[r]>array[max]){max=r;}if(max!=i){tmp=array[max];array[max]=array[i];array[i]=tmp;down(max);}}int pop(){if(this->count==0)return -1;int data=this->array[0];this->array[0]=this->array[this->count-1];count--;down(0);return data;}int push(int data){this->count++;int i=this->count-1;while(data>this->array[parent(i)]){this->array[i]=this->array[parent(i)];i=parent(i);}this->array[i]=data;}void destroyHeap(){this->count=0;//delete [] this->array;}void buildHeap(int *a,int n){for(int i=0;i<n;i++){this->array[i]=a[i];}this->count=n;for(int i=(n-1)/2;i>=0;i--){this->down(i);}}};

原创粉丝点击