A41150. 重建二叉树给定一棵二叉树的前序遍历和中序遍历的结果,求其后序遍历。输入输入可能有多组,以EOF结束。 每组输入包含两个字符串,分别为树的前序遍历和中序遍历。每个字符串中只包含大写字母且互不重复。输出对于每组输入,用一行来输出它后序遍历结果。样例输入DBACEGF ABCDEFGBCAD CBAD样例输出ACBFGEDCDAB
填空题
困难
知识点
题目描述
重建二叉树
给定一棵二叉树的前序遍历和中序遍历的结果,求其后序遍历。
输入
输入可能有多组,以EOF结束。 每组输入包含两个字符串,分别为树的前序遍历和中序遍历。每个字符串中只包含大写字母且互不重复。
输出
对于每组输入,用一行来输出它后序遍历结果。
样例输入
DBACEGF ABCDEFG
BCAD CBAD
样例输出
ACBFGED
CDAB
参考答案
#include <bits/stdc++.h>
using namespace std;
char a[30],b[30];
string ta,tb;
int la,lb;
void build(int l1,int r1,int l2,int r2){
int m=tb.find(ta[l1]);
if(m>l2)build(l1+1,l1+m-l2,l2,m-1);
if(m<r2)build(l1+m-l2+1,r1,m+1,r2);
cout<<ta[l1];
}
int main()
{
while(scanf("%s",a)!=EOF){
scanf("%s",b);
ta=string(a);
tb=string(b);
build(0,ta.size()-1,0,tb.size()-1);
cout<<endl;
}
return 0;
}
上一题
下一题