题意
判断最大堆,最小堆,不是堆
每层的根节点比其孩子大就是大顶堆
每层的根节点比其孩子小就是小顶堆
由于堆是完全二叉树,可以很方便的知道堆的每个节点的孩子节点
2
×
i
n
d
e
x
2\times index
2×index和
2
×
i
n
d
e
x
+
1
2\times index+1
2×index+1
code
#include <bits/stdc++.h>
using namespace std;
int a[1010],m,n,d,fir=0;
void postorder(int st){
if(2*st<=n) postorder(2*st);
if(2*st+1<=n) postorder(2*st+1);
fir?cout<<' '<<a[st]:cout<<a[st];
fir=1;
}
int main(){
cin>>m>>n;
while(m--){
bool ismax=1,ismin=1;
fir=0;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<=n;i++){
if(a[i/2]>a[i]) ismin=0;
if(a[i/2]<a[i]) ismax=0;
}
if(ismin) cout<<"Min Heap"<<endl;
else if(ismax) cout<<"Max Heap"<<endl;
else cout<<"Not Heap"<<endl;
postorder(1);
cout<<endl;
}
return 0;
}