给出一个完全二叉树(用数组存储),判断是不是堆(写出max min not),然后给出后序遍历的结果。
判断max min的方法:对所有有孩子的结点,验证是否孩子都小于父母or都大于父母
#include<bits/stdc++.h>
using namespace std;
const int maxn=1010;
int d[maxn];int m,n;
void postOrder(int a){
if(a>n) return;
postOrder(2*a);
postOrder(2*a+1);
if(a!=1)
printf("%d ",d[a]);
}
void heap(){
bool max=true,min=true;
for(int i=1;i<=n;i++){
if(2*i<=n){
if(d[i]<d[2*i]) max=false;
if(d[i]>d[2*i]) min=false;
}
if(2*i+1<=n){
if(d[i]<d[2*i+1]) max=false;
if(d[i]>d[2*i+1]) min=false;
}
}
if(max){
printf("Max Heap\n");
}else if(min){
printf("Min Heap\n");
}else{
printf("Not Heap\n");
}
}
int main(){
scanf("%d %d",&m,&n);
for(int i=0;i<m;i++){
for(int j=1;j<=n;j++){
scanf("%d",&d[j]);
}
heap();
postOrder(1);printf("%d\n",d[1]);
}
return 0;
}