无需创建树,直接使用数组即可。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int m, n;
bool maxheap;
bool minheap;
vector<int> level;
void isHeap(int index) {
if (index * 2 > n) return;
if ((index * 2 + 1) < n && level[index] > level[index * 2 + 1]) {
maxheap = true;
}
else if ((index * 2 + 1) < n && level[index] < level[index * 2 + 1]) {
minheap = true;
}
if ((index * 2 + 2) < n && level[index] > level[index * 2 + 2]) {
maxheap = true;
}
else if ((index * 2 + 2) < n && level[index] < level[index * 2 + 2]) {
minheap = true;
}
isHeap(index * 2 + 1);
isHeap(index * 2 + 2);
}
void postorder(int index) {
if (index * 2 + 1 < n) {
postorder(index * 2 + 1);
}
if (index * 2 + 2 < n) {
postorder(index * 2 + 2);
}
printf("%d", level[index]);
if (index != 0) printf(" ");
}
int main() {
scanf_s("%d %d", &m, &n);
level.resize(n);
int times;
for (times = 0;times < m;times++) {
maxheap = false;
minheap = false;
for (int i = 0;i < n;i++) {
scanf_s("%d", &level[i]);
}
isHeap(0);
if (maxheap && minheap) printf("Not Heap\n");
else if (maxheap) printf("Max Heap\n");
else if (minheap) printf("Min Heap\n");
postorder(0);
printf("\n");
}
return 0;
}