#include <iostream>
#include <vector>
using namespace std;
vector<int> postOrder;
int keys[1010];
int m,n;
int isHeap(){
int heap = -1;
int i = 0; // 从0开始遍历
while(2 * i + 1 < n){
if(keys[2 * i + 1] <= keys[i] && (2 * i + 2 == n || keys[2 * i + 2] <= keys[i])){
if(heap == -1 || heap == 1)
heap = 1;
else{
heap = 2;
break;
}
}
else if(keys[2 * i + 1] >= keys[i] && (2 * i + 2 == n || keys[2 * i + 2] >= keys[i])){
if(heap == -1 || heap == 0)
heap = 0;
else{
heap = 2;
break;
}
}
else{
heap = 2;
break;
}
i++;
}
return heap;
}
void postTrav(int root){
if(2 * root + 1 < n)
postTrav(2 * root + 1);
if(2 * root + 2 < n)
postTrav(2 * root + 2);
postOrder.push_back(keys[root]);
}
int main(){
scanf("%d%d",&m,&n);
for(int i = 0;i < m;i++){
postOrder.clear();
for(int j = 0;j < n;j++)
scanf("%d",&keys[j]);
int heap = isHeap(); // heap == 0 -> 小根堆 heap == 1 -> 大根堆 heap == 2 -> 不是堆
if(heap == 0)
printf("Min Heap\n");
else if(heap == 1)
printf("Max Heap\n");
else
printf("Not Heap\n");
postTrav(0);
for(int j = 0;j < n;j++){
printf("%d",postOrder[j]);
if(j != n - 1)
printf(" ");
else
printf("\n");
}
}
system("pause");
return 0;
}
09-06
106
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)