二叉树的序遍历
题目描述
求一棵二叉树的前序遍历,中序遍历和后序遍历。
输入输出格式
输入描述:
第一行一个整数n,表示这棵树的节点个数。
接下来n行每行2个整数L和R。第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号。
输出描述:
输出一共三行,分别为前序遍历,中序遍历和后序遍历。编号之间用空格隔开。
输入输出样例
输入样例#1:
5
2 3
4 5
0 0
0 0
0 0
输出样例#1:
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
思路
递归。先写好先序,再将先序略微改动,复制粘贴三遍即可。
代码
#include<stdio.h> int a[100],b[100]; void A(int i) { printf("%d ",i); if(a[i]) A(a[i]); if(b[i]) A(b[i]); } void B(int i) { if(a[i]) B(a[i]); printf("%d ",i); if(b[i]) B(b[i]); } void C(int i) { if(a[i]) C(a[i]); if(b[i]) C(b[i]); printf("%d ",i); } int main() { int n,i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); A(1); printf("\n"); B(1); printf("\n"); C(1); return 0; }