判断一个数据序列是否构成一个小根堆
实现代码:
#include <stdio.h>//判断一个数据序列是否构成一个小根堆
bool IsMinHeap(int A[],int len){//将二叉树结点序列看成一个循序表
int i;
if(len%2==0){//结点个数为偶数个时的判断
if(A[len/2]>A[len])
return false;
for(i=len/2-1;i>=1;i--){
if(A[i]>A[2*i]||A[i]>A[2*i+1])
return false;
}
}else if(len%2==1){//结点个数为奇数个时的判断
for(i=len/2-1;i>=1;i--){
if(A[i]>A[2*i]||A[i]>A[2*i+1])
return false;
}
}else{
return true;
}
}
int main(int argc, char *argv[])
{
int a[8]={0,3,6,7,8,9,10,11};//为了方便从数组下标为1的结点开始比较
printf("%d\n",IsMinHeap(a,7));
return 0;
}
输出结果:
1
请按任意键继续. . .