Problem 78: 重建二叉树
Time Limit:1 Ms| Memory Limit:100 MB
Difficulty:0
Description
题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
Input
输入有多组数据(少于100组),以文件结尾结束。
每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)
每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)
Output
每组输出数据单独占一行,输出对应得先序序列。
Sample Input
ACBFGED ABCDEFG
CDAB CBAD
CDAB CBAD
Sample Output
DBACEGF
附加一个前中转后的代码, 把后中转前的稍加改动就可以
BCAD
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char preans[30];
int p;
void pre(char post[], char in[])
{
int len = strlen(in), pos;
if(len == 0)
{
return;
}
pos = strchr(in, post[len-1]) - in;
preans[p++] = in[pos];
in[pos] = 0;
pre(post, in);
pre(&post[pos], &in[pos+1]);
}
int main()
{
char in[30] = {0}, post[30] = {0};
while(scanf("%s%s", post, in) != EOF)
{
p = 0;
pre(post, in);
preans[p] = 0;
printf("%s\n", preans);
}
return 0;
}
附加一个前中转后的代码, 把后中转前的稍加改动就可以
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char poo[30], pro[30], ino[30];
int top;
void find(char pro[], char ino[])
{
int len = strlen(ino), pos;
if(len == 0)
{
return;
}
pos = strchr(ino, pro[0]) - ino;
poo[top--] = ino[pos];
ino[pos] = 0;
find(pro+pos+1, &ino[pos+1]);
find(pro+1, ino);
}
int main()
{
int len;
scanf("%s%s", pro, ino);
len = strlen(pro);
top = len-1;
find(pro, ino);
poo[len] = 0;
printf("%s\n", poo);
return 0;
}