#include<iostream>
#include<vector>
using namespace std;
int n, level[1010];
vector<int> path;
void DFS(int x) {
path.push_back(level[x]);
if(2 * x + 1 <= n) DFS(2 * x + 1);
if(2 * x <= n) DFS(2 * x);
if(2 * x > n) {
for(int i = 0; i < path.size(); i++) {
if(i) cout << " ";
cout << path[i];
}
cout << endl;
}
path.pop_back();
}
int main() {
cin >> n;
int minHeap = 1, maxHeap = 1;
for(int i = 1; i <= n; i++) {
cin >> level[i];
if(i > 1 && level[i / 2] < level[i]) maxHeap = 0;
if(i > 1 && level[i / 2] > level[i]) minHeap = 0;
}
DFS(1);
if(maxHeap) cout << "Max Heap";
else if(minHeap) cout << "Min Heap";
else cout << "Not Heap";
return 0;
}
柳神代码
#include<iostream>
#include<vector>
using namespace std;
int n, level[1010];
vector<int> path;
void DFS(int x) {
if(x * 2 > n && x * 2 + 1 > n) {
if(x <= n) {
for(int i = 0; i < path.size(); i++) {
if(i) cout << " ";
cout << path[i];
}
cout << endl;
}
} else {
path.push_back(level[x * 2 + 1]);
DFS(x * 2 + 1);
path.pop_back();
path.push_back(level[x * 2]);
DFS(x * 2);
path.pop_back();
}
}
int main() {
cin >> n;
int minHeap = 1, maxHeap = 1;
for(int i = 1; i <= n; i++) {
cin >> level[i];
if(i > 1 && level[i / 2] < level[i]) maxHeap = 0;
if(i > 1 && level[i / 2] > level[i]) minHeap = 0;
}
path.push_back(level[1]);
DFS(1);
if(maxHeap) cout << "Max Heap";
else if(minHeap) cout << "Min Heap";
else cout << "Not Heap";
return 0;
}