#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <unordered_map>
using namespace std;
struct node{
int lchild;
int rchild;
}Node[110];
bool notRoot[110] = {false};
//反转
void postOrderInvert(int root){
if(root==-1){
return;
}
postOrderInvert(Node[root].lchild);
postOrderInvert(Node[root].rchild);
swap(Node[root].lchild,Node[root].rchild);
}
int sum;
int N;
void print(int id){
cout<<id;
sum++;
if(sum<N){
cout<<" ";
} else{
cout<<endl;
}
}
//中序
void inOrder(int root){
if(root==-1){
return;
}
inOrder(Node[root].lchild);
print(root);
inOrder(Node[root].rchild);
}
void BFS(int root){
queue<int> q;
q.push(root);
while (!q.empty()){
int now = q.front();
print(now);
q.pop();
if(Node[now].lchild!=-1){
q.push(Node[now].lchild);
}
if(Node[now].rchild!=-1){
q.push(Node[now].rchild);
}
}
}
int strToNum(string s){
if(s=="-"){
return -1;
} else{
notRoot[atoi(s.c_str())]= true;
return atoi(s.c_str());
}
}
int findRoot(){
for(int i =0;i<N;i++){
if(!notRoot[i]){
return i;
}
}
}
int main() {
cin>>N;
string lchild,rchild;
for(int i=0;i<N;i++){
cin>>lchild>>rchild;
Node[i].lchild = strToNum(lchild);
Node[i].rchild = strToNum(rchild);
}
// cout<<Node[0].lchild;
int root = findRoot();
// cout<<root;
postOrderInvert(root);
// cout<<Node[2].rchild;
BFS(root);
sum =0;
inOrder(root);
return 0;
}
树的静态写法 不用建树 可以直接遍历BFS 前 中 后
BFS中要注意 每次q出队时保存的正整数是当前根节点的数,后面不要都写成root,要用now这个临时变量代表此时此刻数的根。