2434 - 二叉树的遍历

通过次数

0

提交次数

0

时间限制 : 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;
}