Ohhhhhhhh完结撒花!!!
接下来就是Top了,嘻嘻
#include <iostream>
#include <vector>
using namespace std;
vector<int> seq;
vector<int> trav;
int DFS(int i,int n){
// return 0 : Not heap
// return 1 : Max heap
// return 2 : Min heap
trav.push_back(seq[i]);
int l = -1,r = -1;
if(2 * i + 2 < n)
r = DFS(2 * i + 2,n);
if(2 * i + 1 < n)
l = DFS(2 * i + 1,n);
if(l == -1 && r == -1){ // 到达叶节点
int res = -1; // 判断这条路是递增还是递减
for(int j = 0;j < trav.size();j++){
printf("%d",trav[j]);
if(j != trav.size() - 1){
printf(" ");
if(trav[j] < trav[j + 1]){ // 递增
if(res == -1)
res = 2;
else if(res == 1)
res = 0;
}else{
if(res == -1)
res = 1;
else if(res == 2)
res = 0;
}
}else{
printf("\n");
}
}
trav.erase(--trav.end());
return res;
}
if(l == r || l == -1 || r == -1){
trav.erase(--trav.end());
return l;
}
else{
trav.erase(--trav.end());
return 0;
}
}
int main(){
int n;
scanf("%d",&n);
for(int i = 0;i < n;i++){
int temp;
scanf("%d",&temp);
seq.push_back(temp);
}
int res = DFS(0,n);
if(res == 0)
printf("Not Heap");
else if(res == 1)
printf("Max Heap");
else
printf("Min Heap");
system("pause");
return 0;
}