数据结构实验之求二叉树后序遍历和层次遍历
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的先序遍历序列,第二个字符串表示二叉树的中序遍历序列。
输出
每组第一行输出二叉树的后序遍历序列,第二行输出二叉树的层次遍历序列
示例输入
2 abdegcf dbgeafc xnliu lnixu
示例输出
dgebfca abcdefg linux xnuli
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node
{
char data ;
struct node *l,*r;
};
struct node *build (char *a,char *b,int n)
{
int k=0;
struct node *p;
char *new;
if (n<=0)
return NULL;
p=(struct node *)malloc(sizeof (struct node ));
p->data=*a;
for (new=&b[0];new <b+n;new++)
{
if (*new==*a)
break;
}
k=new-b;
p->l=build (a+1,b,k);
p->r=build (a+1+k,new+1,n-1-k);
return p;
}
void last (struct node *p)
{
if (p!=NULL)
{
last (p->l);
last (p->r);
printf ("%c",p->data);
}
}
void cengci (struct node *t)//层次遍历,利用队列的思想
{
int a=0,s=1;//a表示当前层,s表示下一层
struct node *p[10000];
p[0]=t;
while (a<s)
{
if (p[a])
{
printf("%c",p[a]->data);
p[s]=p[a]->l;//先左后右,个数+1;层不变
s++;
p[s]=p[a]->r;
a++;s++;//个数层数都加1
}
else
{
a++;
}
}
}
int main ()
{
int t,n;
char a[100],b[100];
while (~scanf ("%d",&t))
{
while (t--)
{
struct node *tree;
scanf ("%s%s",a,b);
n=strlen (a);
tree=build (a,b,n);
last (tree);
printf ("\n");
cengci (tree);
printf ("\n");
}
}
return 0;
}