题目描述
已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历
输入
输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。
输出
输出二叉树的先序遍历序列
示例输入
2 dbgeafc dgebfca lnixu linux
示例输出
abdegcf xnliu
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node
{
char data;
struct node *l,*r;
};
char str1[1010],str2[1010];
struct node *creat(char *str1,char *str2,int len)
{
if(len<=0)
return NULL;
struct node *root=(struct node*)malloc(sizeof(struct node));
root->data=str2[len-1];
int p,i;
for(i=0;i<len;i++) //(p=strchr(str1,str2[len-1)-str1)
if(str2[len-1]==str1[i])
{
p=i;
break;
}
root->l=creat(str1,str2,p);
root->r=creat(str1+p+1,str2+p,len-p-1);
return root;
}
void pre(struct node *root)
{
if(root!=NULL)
{
printf("%c",root->data);
pre(root->l);
pre(root->r);
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
struct node *head;
scanf("%s %s",str1,str2);
int l=strlen(str2);
head=creat(str1,str2,l);
pre(head);
printf("\n");
}
return 0;
}