pat甲级1102
程序
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int> ve1;
void lev_order(pair<int,int> *pa,int r){//翻转树的层序遍历
queue<int> qu;
qu.push(r);
while(!qu.empty()){
int q=qu.front();
qu.pop();
ve1.push_back(q);
if(pa[q].second!=-1) qu.push(pa[q].second);
if(pa[q].first!=-1) qu.push(pa[q].first);
}
}
vector<int> ve;
void in_order(pair<int,int> *pa,int r){//翻转树的中序遍历
if(r!=-1){
in_order(pa,pa[r].second);
ve.push_back(r);
in_order(pa,pa[r].first);
}
}
int main(){
int n;
char r1,r2;
cin>>n;
pair<int,int> pa[n];
bool vis[n]={false};//用于找根节点
for(int i=0;i<n;i++){
cin>>r1>>r2;
if(r1!='-'){
pa[i].first=r1-'0';
vis[pa[i].first]=true;
}
else
pa[i].first=-1;
if(r2!='-'){
pa[i].second=r2-'0';
vis[pa[i].second]=true;
}
else
pa[i].second=-1;
}
int root;
for(int i=0;i<n;i++){//找根节点
if(!vis[i]){
root=i;
break;
}
}
lev_order(pa,root);
in_order(pa,root);
for(int i=0;i<ve1.size();i++){
cout<<ve1[i];
if(i!=ve1.size()-1)
cout<<" ";
}
cout<<endl;
for(int i=0;i<ve.size();i++){
cout<<ve[i];
if(i!=ve.size()-1)
cout<<" ";
}
cout<<endl;
return 0;
}