跟1155 Heap Path约等于一样,把深搜改成后序遍历。
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
int m,n;
vector<int> post,arr;
void postorder(int curr){
if(curr>=n)return;
postorder(curr*2+1);
postorder(curr*2+2);
post.push_back(arr[curr]);
}
int main(){
scanf("%d%d",&m,&n);
bool ismax=false,ismin=false;
for(int j=0;j<m;j++){
arr.clear();
for(int i=0;i<n;i++){
int num;
scanf("%d",&num);
arr.push_back(num);
}
for(int i=0;i*2+1<n;i++){
if(arr[i*2+1]>arr[i])ismin=true;
else ismax=true;
if(i*2+2<n){
if(arr[i*2+2]>arr[i])ismin=true;
else ismax=true;
}
}
if(ismax && ismin)printf("Not Heap\n");
else if(ismax)printf("Max Heap\n");
else printf("Min Heap\n");
post.clear();
ismax=ismin=false;
postorder(0);
for(int k=0;k<post.size();k++){
printf("%d",post[k]);
if(k!=post.size()-1)printf(" ");
else printf("\n");
}
}
}