比较简单。。。。考试要是都考这样的100分真的是轻轻松松。。
#include<iostream>
#include<vector>
using namespace std;
int n;
vector<vector<int>> ans;
vector<int> temp;
bool checkmax(vector<int> v) {
for (int i = 0; i <= n / 2; i++) {
int left = i * 2 + 1;
int right = i * 2 + 2;
if (left < n&&v[i] < v[left]) return false;
if (right < n&&v[i] < v[right]) return false;
}
return true;
}
bool checkmin(vector<int> v) {
for (int i = 0; i <= n / 2; i++) {
int left = i * 2 + 1;
int right = i * 2 + 2;
if (left < n&&v[i] > v[left]) return false;
if (right < n&&v[i] > v[right]) return false;
}
return true;
}
void dfs(int root,vector<int> v,vector<int> s) {
if (root >= n)return;
s.push_back(v[root]);
int left = root * 2 + 1;
int right = root * 2 + 2;
if (left >= n && right >= n) ans.push_back(s);
else {
dfs(right, v, s);
dfs(left, v, s);
}
}
int main() {
cin >> n;
vector<int> v(n);
for (int i = 0; i < n; i++)scanf("%d",&v[i]);
dfs(0, v, temp);
for (vector<int> p : ans) {
for (int i = 0; i < p.size(); i++) {
if (i)printf(" ");
printf("%d", p[i]);
}
puts("");
}
if (checkmax(v)) printf("Max Heap");
else if (checkmin(v)) printf("Min Heap");
else printf("Not Heap");
return 0;
}