分析
堆判断部分:参照1155 Heap Paths——DFS
堆后序的遍历:形式上与树的后序遍历相同,只不过这里动的是“数组的指针”
代码
#include<bits/stdc++.h>
using namespace std;
int times, quantity;
bool first{ true };
vector<int>sequence;
void InPut();
void Judge();
void Print(int);
int main() {
scanf("%d %d", ×, &quantity);
sequence.resize(quantity + 1);
for (int i = 0; i < times; i++){
InPut();
Judge();
Print(1);
printf("\n");
first = true;
; }
return 0;
}
void InPut() {
int x;
for (int i = 0; i < quantity; i++) {
scanf("%d", &x);
sequence[i + 1] = x;
}
}
void Judge() {
bool is_min{ true }, is_max{ true };
for (int i = 2; i < sequence.size(); i++) {
sequence[i / 2] > sequence[i] ? is_min = false : is_max = false;
}
if (is_min)
printf("Min Heap\n");
else
printf("%s\n", is_max ? "Max Heap" : "Not Heap");
}
void Print(int start) {
if (start > quantity) return;
Print(2 * start);
Print(2 * start + 1);
first ? printf("%d", sequence[start]), first = false : printf(" %d", sequence[start]);
}