2434 - 二叉树的遍历
时间限制 : 1 秒
内存限制 : 128 MB
给出一个n个节点的二叉树,请求出二叉树的前序遍历,中序遍历和后序遍历。
题目输入
第一位一个整数n(0<n<=26),表示二叉树有n个节点,以下n行,每行第一个为一个大写字母表示节点,后面为两整数,第一个表示左儿子序号,第二个表示右儿子序号,如果该序号为0表示没有
题目输出
共三行,第一行为二叉树的前序遍历,第二行为中序遍历,第三行为后序遍历
输入/输出样例
输入格式
7 F 2 3 C 4 5 E 0 6 A 0 0 D 7 0 G 0 0 B 0 0
输出格式
FCADBEG ACBDFEG ABDCGEF
C++解答
#include<iostream> #include<cstring> #include<cstdio> using namespace std; struct tree { char data; int prt,lch,rch; }; int n; tree a[30]; void init(); int q_order(int); int z_order(int); int h_order(int); int main() { //freopen("test7.in","r",stdin); //freopen("test7.out","w",stdout); init(); q_order(1);cout<<endl; z_order(1);cout<<endl; h_order(1);cout<<endl; return 0; } void init() { memset(a,0,sizeof(a)); cin>>n; int x,y; for(int i=1;i<=n;i++) { cin>>a[i].data;//读节点值 cin>>x>>y;//x为左儿子,y为右儿子 if(x!=0)//当左儿子非0 { a[i].lch=x; a[x].prt=i; } if(y!=0)//当右儿子非0 { a[i].rch=y; a[y].prt=i; } } } int q_order(int x) { if(x==0) return 0;//当节点为0退出 cout<<a[x].data; q_order(a[x].lch); q_order(a[x].rch); return 0; } int z_order(int x) { if(x==0) return 0; z_order(a[x].lch); cout<<a[x].data; z_order(a[x].rch); return 0; } int h_order(int x) { if(x==0) return 0; h_order(a[x].lch); h_order(a[x].rch); cout<<a[x].data; return 0; }