题目链接:PAT【甲级】1147
题目简述:这个题目和1155还有点像。1155是让你去判断是哪种堆后,进行遍历序列的输出;而这个是要求去求得它的后序遍历,这个稍微简单一些,直接套递归版的后序遍历框架即可。
#include<bits/stdc++.h>
using namespace std;
void postOrder(vector<int>& tree, int beg, int N){
if(beg > N) return;
postOrder(tree, 2 * beg, N);
postOrder(tree, 2 * beg + 1, N);
cout << tree[beg];
if(beg != 1) cout << " ";
}
int main(){
int M, N;
cin >> M >> N;
vector<int> tree(N + 1);
while(M--){
bool isMinHeap = false, isMaxHeap = false;
for (int i = 1; i <= N;i++){
cin >> tree[i];
if(i > 1 && tree[i/2] > tree[i])
isMaxHeap = true;
if(i > 1 && tree[i/2] < tree[i])
isMinHeap = true;
}
if(!isMaxHeap)
printf("Min Heap\n");
else if(!isMinHeap)
printf("Max Heap\n");
else
printf("Not Heap\n");
postOrder(tree, 1, N);
cout << "\n";
}
return 0;
}
这个题目还是稍微简单一些,要处理的关键点较少。