题目:输入的是:最小堆的中序序列,输出层序序列(题目保证元素不重复)
思路:通过最小元素确定根,使用队列层序输出
#include<iostream>
#include<string>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
int a[35];
vector<int> ans;
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
queue<pair<int,int>> q;
q.push(make_pair(0,n-1));
while(!q.empty()){
int size=q.size();
for(int i=0;i<size;i++){
auto &[start,endp]=q.front();
q.pop();
int p=start,root=989898,pos=-1;
while(p<=endp){
if(a[p]<root){
root=a[p];
pos=p;
}
p++;
}
ans.push_back(root);
if(start<=pos-1){
q.push(make_pair(start,pos-1));
}
if(pos+1<=endp){
q.push(make_pair(pos+1,endp));
}
}
}
for(int i=0;i<ans.size();i++){
if(i==0){
cout<<ans[0];
}
else cout<<" "<<ans[i];
}
return 0;
}