测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题