算法训练 求先序排列
时间限制:1.0s 内存限制:256.0MB
问题描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入格式
两行,每行一个字符串,分别表示中序和后序排列
输出格式
一个字符串,表示所求先序排列
样例输入
BADC
BDCA
样例输出
ABCD
#include <stdio.h>
#include <string.h>
void preorder(char *inorder, int in_start, int in_end, char *postorder, int post_start, int post_end)
{
if (in_start > in_end)
return;
char mid = postorder[post_end];
printf("%c", mid);
if (in_start == in_end)
return;
int in_mid = in_start;
while (in_mid <= in_end)
{
if (inorder[in_mid] == mid)
break;
in_mid++;
}
preorder(inorder, in_start, in_mid-1, postorder, post_start, post_start+(in_mid-in_start)-1);
preorder(inorder, in_mid+1, in_end, postorder, post_end-(in_end-in_mid), post_end-1);
}
int main()
{
char inorder[10] = { 0 }, postorder[10] = { 0 };
scanf("%s", inorder);
scanf("%s", postorder);
preorder(inorder, 0, (int)strlen(inorder)-1, postorder, 0, (int)strlen(postorder)-1);
return 0;
}