描述

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。


格式

输入格式

共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

输出格式

一行,表示树的后序遍历序列。


样例

输入样例

abdec
dbeac

输出样例

debca


限制

时间限制:1000 ms
内存限制:65536 KB


代码

  1. #include<string.h>
  2. #include<stdio.h>
  3. char s1[20], s2[20], ans[20];//s1[N],s2[N]分别为先序和中序遍历序列
  4. void build(int n, char* s1, char* s2, char* s)
  5. {
  6. if(n <= 0) return; int p = strchr(s2, s1[0]) - s2;//找到根结点的位置
  7. build(p, s1+1, s2, s);//递归构造左子树的后序遍历
  8. build(n-p-1, s1+p+1, s2+p+1, s+p);//递归构造右子树的后序遍历
  9. s[n-1] = s1[0];//把根结点添加到最后
  10. }
  11. int main()
  12. {
  13. while(scanf("%s%s",s1, s2) == 2)
  14. {
  15. int n= strlen(s1);
  16. build(n, s1,s2, ans);
  17. ans[n] = '\0';
  18. printf("%s\n",ans);
  19. return 0;
  20. }
  21. }