题目描述:
设计一个算法,判断一个数据序列是否构成一个小根堆。
算法思想:
将顺序表L[1...n]视为一个完全二叉树,扫描所有分支结点,遇到孩子结点的关键字小于根结点的关键字时,返回false,扫描完后,返回true。
bool IsMinHeap(ElemType A[],int len)
{
if(len%2==0){ //len为偶数,有一个单分支结点
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{
for(i=len/2;i>=1;i--) //len为奇数时,不存在单分支结点
if(A[i]>A[2*i]||A[i]>A[2*i+1]) //判断所有双分支结点
return false;
}
return true;
}