#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
struct node{
int leftchild;
int rightchild;
};
vector<int>ans1;
vector<int>ans2;
node nodes[10];
queue<int>q;
void bfs(int k){
ans1.push_back(k);
if(nodes[k].leftchild!=-1) q.push(nodes[k].leftchild);
if(nodes[k].rightchild!=-1) q.push(nodes[k].rightchild);
if(q.size()>0){
int temp;
temp=q.front();
q.pop();
bfs(temp);
}
return;
}
void in_order_travel(int k){
if(nodes[k].leftchild!=-1) in_order_travel(nodes[k].leftchild);
ans2.push_back(k);
if(nodes[k].rightchild!=-1) in_order_travel(nodes[k].rightchild);
return;
}
int main(){
int root;
vector<int>find_root;
int N;
cin>>N;
getchar();
string s;
for(int i=0;i<N;i++){
getline(cin,s);
if(s[0]=='-') nodes[i].rightchild=-1;
else {
nodes[i].rightchild=s[0]-'0';
find_root.push_back(s[0]-'0');
}
if(s[2]=='-') nodes[i].leftchild=-1;
else {
nodes[i].leftchild=s[2]-'0';
find_root.push_back(s[2]-'0');
}
}
if(N==1){
cout<<0<<endl<<0;
return 0;
}
sort(find_root.begin(),find_root.end());
int i;
for(i=0;i<N;i++){
if(i!=find_root[i]) break;
}
root=i;
bfs(root);
in_order_travel(root);
for(int i=0;i<N;i++){
cout<<ans1[i];
if(i!=N-1) cout<<" ";
}
cout<<endl;
for(int i=0;i<N;i++){
cout<<ans2[i];
if(i!=N-1) cout<<" ";
}
}
1102 Invert a Binary Tree PAT甲级
最新推荐文章于 2024-07-25 11:38:39 发布