输入用例:
BAC
BCA
XDEFAG
XEDGAF
输出用例:
ABC
FDXEAG
思路与前面那道由前序中序输出后序思路一样,前面有详细的解答
///
/// @file test.cc
/// @author miaobeihai(452686191@qq.com)
/// @date 2017-03-05 16:31:36
///
#include<stdio.h>
#include<string.h>
int loc=0;
char str1[100],str2[100];
struct Node{
Node *rchild;
Node *lchild;
int data;
}Tree[50];
Node *create()
{
Tree[loc].rchild=Tree[loc].lchild=NULL;
return &Tree[loc++];
}
void preOrder(Node *T)
{
if(T){
printf("%c",T->data);
if(T->lchild!=NULL)
preOrder(T->lchild);
if(T->rchild!=NULL)
preOrder(T->rchild);
//printf("%c",T->data);
}
}
Node *build(int s1,int e1,int s2,int e2)
{
int idx,i;
Node *T=create();
T->data=str2[e2];
for(i=s1;i<=e1;i++)
{
if(str1[i]==str2[e2]){
idx=i;
break;
}
}
if(idx!=s1)
{
T->lchild=build(s1,idx-1,s2,s2+(idx-s1-1));
}
if(idx!=e1)
{
T->rchild=build(idx+1,e1,s2+(idx-s1),e2-1);
}
return T;
}
int main()
{
while(scanf("%s",str1)!=EOF)
{
scanf("%s",str2);
int len1=strlen(str1);
int len2=strlen(str2);
Node *T=build(0,len1-1,0,len2-1);
preOrder(T);
printf("\n");
}
return 0;
}