题目:给定完全二叉树的层序遍历,判断是否是最大堆、最小堆or不是堆
思路:利用堆的性质 1.完全二叉树 2.根节点大于or小于子节点,从子节点向上遍历判断
#include<iostream>
#define MAXM 1010
using namespace std;
int a[MAXM];
int ct=0;
void postOrder(int start,int endp){
if(start>endp) return;
postOrder(start*2,endp);
postOrder(start*2+1,endp);
if(ct==0) cout<<a[start];
else cout<<" "<<a[start];
ct++;
}
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=1;j<=m;j++){
cin>>a[j];
}
int maxH=1,minH=1;
for(int j=m;j>1;j--){
if(a[j]>a[j/2]) maxH=0;
if(a[j]<a[j/2]) minH=0;
if(!maxH&&!minH) break;
}
if(maxH)cout<<"Max Heap\n";
if(minH)cout<<"Min Heap\n";
if(!maxH&&!minH) cout<<"Not Heap\n";
ct=0;
postOrder(1,m);
cout<<"\n";
}
return 0;
}