重建二叉树
时间限制:1000 ms | 内存限制:65535 KB
难度:3
描述
题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
输入
输入有多组数据(少于100组),以文件结尾结束。
每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。
输出
每组输出数据单独占一行,输出对应得先序序列。
样例输入
ACBFGED ABCDEFG
CDAB CBAD
样例输出
DBACEGF
BCAD
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Node
{
char date;
struct Node *LChild;
struct Node *RChild;
}BiNode,*BiTree;
void CreatTree(BiTree *root,char *s3,char *s2,int len)
{
if(len == 0)
{
*root = NULL;
return ;
}
BiTree node = (BiTree)malloc(sizeof(BiNode));
node->date = s3[len-1];
node->LChild = node->RChild = NULL;
*root = node;
char *s1 = strchr(s2,node->date);//找到根节点在中序遍历中的位置
int leftlen = strlen(s2) - strlen(s1);
int rightlen = len - 1 - leftlen;
CreatTree(&(*root)->LChild,s3,s2,leftlen);
CreatTree(&(*root)->RChild,s3+leftlen,s1+1,rightlen);
}
void PreOrder(BiTree root)
{
if(root!=NULL)
{
printf("%c",root->date);
PreOrder(root->LChild);
PreOrder(root->RChild);
}
}
int main()
{
char s3[27],s2[27];
while(scanf("%s %s",s3,s2)!=EOF)
{
BiTree root = NULL;
CreatTree(&root,s3,s2,strlen(s3));
PreOrder(root);
printf("\n");
}
return 0;
}