递归实在太好看了
#include<bits/stdc++.h>
using namespace std;
template <typename T> void read(T &x){
x=0;int f=1;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-1;
for(;isdigit(ch);ch=getchar())x=(x<<1)+(x<<3)+ch-'0';
x*=f;
}
int n;
int lc[21],rc[21];
void firstdfs(int x){
cout<<x<<" ";
if(lc[x]!=0) firstdfs(lc[x]);
if(rc[x]!=0) firstdfs(rc[x]);
}
void middledfs(int x){
if(lc[x]!=0) middledfs(lc[x]);
cout<<x<<" ";
if(rc[x]!=0) middledfs(rc[x]);
}
void lastdfs(int x){
if(lc[x]!=0) lastdfs(lc[x]);
if(rc[x]!=0) lastdfs(rc[x]);
cout<<x<<" ";
}
int main(){
read(n);
for(int i=1;i<=n;++i){
read(lc[i]);
read(rc[i]);
}
firstdfs(1);
cout<<endl;
middledfs(1);
cout<<endl;
lastdfs(1);
cout<<endl;
return 0;
}