分析
堆判断部分:参照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");elseprintf("%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]);
}