题目链接:http://codevs.cn/problem/3143/
解题思路:
直接按照顺序递归下去
AC代码:
#include <iostream>
#include <cstdio>
#include <queue>
#include <stack>
using namespace std;
const int maxn = 1e4 + 5;
struct Tree {
int lc, rc;
}t[maxn];
int n;
int in[maxn];
queue<int> q;
inline void Printq(void) {
int f = 0;
while(q.size()) {
int u = q.front(); q.pop();
if(!f) printf("%d", u), f = 1;
else printf(" %d", u);
}
puts("");
}
inline void pre_sort(int u) {
q.push(u);
if(t[u].lc) pre_sort(t[u].lc);
if(t[u].rc) pre_sort(t[u].rc);
}
inline void medium_sort(int u) {
if(t[u].lc) medium_sort(t[u].lc);
q.push(u);
if(t[u].rc) medium_sort(t[u].rc);
}
inline void after_sort(int u) {
if(t[u].lc) after_sort(t[u].lc);
if(t[u].rc) after_sort(t[u].rc);
q.push(u);
}
int main(void) {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) t[i].lc = t[i].rc = 0;
for(int i = 1, lc, rc; i <= n; i ++) {
scanf("%d%d", &lc, &rc);
if(lc) t[i].lc = lc;
if(rc) t[i].rc = rc;
in[lc] ++, in[rc] ++;
}
int u;
for(int i = 1; i <= n; i ++)
if(in[i] == 0) {
u = i;
break;
}
pre_sort(u);
Printq();
medium_sort(u);
Printq();
after_sort(u);
Printq();
return 0;
}