Description
题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
Input
输入有多组数据(少于100组),以文件结尾结束。
每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。
Output
每组输出数据单独占一行,输出对应得先序序列。
Sample Input
ACBFGED ABCDEFG CDAB CBAD
Sample Output
DBACEGF BCAD
Solve:
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node{
char data;
struct node *leftchild;
struct node *rightchild;
}node,*nod;
void sad(char *last,char *mid,nod &root,int len)//不太明白为什么要这样写->nod &root
{
if(len==0)
{
root=NULL;
return ;
}
char ch=last[len-1];
int i=0;
while(mid[i]!=ch)
{
i++;
}
//给根节点分配空间
root=(nod)malloc(sizeof(node));
root->data = mid[i];
//建立左子树
sad(last,mid,root->leftchild ,i);
//建立右子数
sad(last+i,mid+i+1,root->rightchild ,len-i-1);
}
void DLR(node *root)//先序输出
{
if(root!=NULL)
{
printf("%c",root->data );
DLR(root->leftchild );
DLR(root->rightchild );
}
}
int main()
{
char mid[30],last[30];
int len;
while(scanf("%s%s",last,mid)!=EOF)
{
len=strlen(last);
node *root=NULL;
sad(last,mid,root,len);
DLR(root);
printf("\n");
}
return 0;
}