1545 - Problem D

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列。

题目输入

有多组数据,每组分为两行输入,第一行表示指定二叉树的先序序列,第二行表示该二叉树的中序序列,序列元素均为大写英文字符,表示二叉树的结点。

题目输出

对于每组数组,在一行上输出该二叉树的后序序列。

输入/输出样例

输入格式

ABDGCEFH
DGBAECHF

输出格式

GDBEHFCA

C语言解答

#include<stdio.h>
#include<string.h>
char s1[32],s2[32];
void cal(int a1,int a2,int len)
{
	if(len<=0)return;
	int i;
	for(i=0;i<len&&s2[a2+i]!=s1[a1];i++);
	cal(a1+1,a2,i);
	cal(a1+i+1,a2+i+1,len-i-1);
	putchar(s1[a1]);
}
int main()
{
	int n;
	while(scanf("%s %s",&s1,&s2)!=EOF)
	{
		n = strlen(s1);
		cal(0,0,n);
		puts("");
	}
	return 0;
}

C++解答

#include<stdio.h>
#include<string.h>

char s1[32],s2[32];

void cal(int a1,int a2,int len) {
	if (len<=0) return ;
	int i;
	for(i=0;i<len && s2[a2+i]!=s1[a1];i++);
	cal(a1+1,a2,i);
	cal(a1+i+1,a2+i+1,len-i-1);
	putchar(s1[a1]);
}

int main() {
	int n;
	while(scanf("%s %s",s1,s2)!=EOF) {
		n=strlen(s1);
		cal(0,0,n);
		puts("");
	}
	return 0;
}