题目描述 Description
求一棵二叉树的前序遍历,中序遍历和后序遍历
输入描述 Input Description
第一行一个整数n,表示这棵树的节点个数。
接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。
输出描述 Output Description
输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。
样例输入 Sample Input
5
2 3
4 5
0 0
0 0
0 0
样例输出 Sample Output
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
数据范围及提示 Data Size & Hint
n <= 16
题解:中序遍历:中左右,前序遍历:左中右,后序遍历:左右中。
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> using namespace std; int a[20][3]; void zhong(int k) { printf("%d ",k); if (a[k][1]) zhong(a[k][1]); if (a[k][2]) zhong(a[k][2]); } void zuo(int k) { if (a[k][1]) zuo(a[k][1]); printf("%d ",k); if (a[k][2]) zuo(a[k][2]); } void you(int k) { if (a[k][1]) you(a[k][1]); if (a[k][2]) you(a[k][2]); printf("%d ",k); } int main() { int n; while (~scanf("%d",&n)) { for (int i=1;i<=n;i++) scanf("%d%d",&a[i][1],&a[i][2]); zhong(1); printf("\n"); zuo(1); printf("\n"); you(1); printf("\n"); } return 0; }