#include <cstdio>
using namespace std;
const int maxn=1020;
int N,M;
int level[maxn];
bool isMax(int root){
if(root*2>N){
return true;
}
if(root*2+1>N) return level[root]>=level[root*2];
int t=(level[root*2]>level[root*2+1])?level[root*2]:level[root*2+1];
return level[root]>=t && isMax(root*2) && isMax(root*2+1);
}
bool isMin(int root){
if(root*2>N){
return true;
}
if(root*2+1>N) return level[root]<=level[root*2];
int t=(level[root*2]<level[root*2+1])?level[root*2]:level[root*2+1];
return level[root]<=t && isMin(root*2) && isMin(root*2+1);
}
void post(int root){
if(root*2>N){
printf("%d",level[root]);
return;
}
post(root*2);
printf(" ");
if(root*2+1<=N){
post(root*2+1);
printf(" ");
}
printf("%d",level[root]);
}
int main(void){
int root;
scanf("%d%d",&M,&N);
for(int i=0;i<M;i++){
for(int j=1;j<=N;j++)
scanf("%d",&level[j]);
root=1;
if(isMax(root)){
printf("Max Heap\n");
}else if(isMin(root)) printf("Min Heap\n");
else printf("Not Heap\n");
post(root);
printf("\n");
}
return 0;
}
1147 Heaps (30 分)
最新推荐文章于 2024-10-28 00:45:37 发布
这段代码实现了一个检查二叉堆性质的程序。它首先读取二叉树的节点层级,然后通过`isMax`和`isMin`函数判断是否为最大堆或最小堆。如果满足堆属性,程序将输出相应的堆类型,并以后序遍历方式打印堆结构。否则,输出'NotHeap'。此代码可用于验证给定的二叉树是否符合堆的定义。
摘要由CSDN通过智能技术生成