Description
求一棵二叉树的前序遍历,中序遍历和后序遍历
Input
第一行一个整数n,表示这棵树的节点个数。
接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。
Output
输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。
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
思路
#include<bits/stdc++.h> using namespace std; const int maxn = 20; int lson[maxn] = {0},rson[maxn] = {0}; void preorder(int x) { if (x != 1) printf(" "); printf("%d",x); if (lson[x]) preorder(lson[x]); if (rson[x]) preorder(rson[x]); } void inorder(int x) { if (x) { inorder(lson[x]); printf("%d ",x); inorder(rson[x]); } } void postorder(int x) { if (lson[x]) postorder(lson[x]); if (rson[x]) postorder(rson[x]); printf("%d ",x); } int main() { int N; scanf("%d",&N); for (int i = 1;i <= N;i++) scanf("%d%d",&lson[i],&rson[i]); preorder(1);printf("\n"); inorder(1);printf("\n"); postorder(1);printf("\n"); return 0; }