题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入输出格式
输入格式:
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式:
1行,表示一棵二叉树的先序。
输入输出样例
输入样例#1:
BADC BDCA
输出样例#1:
ABCD
【解析】
后序最后一个一定是根,找到根在中序中的位置,递归构建左右子树。
【代码】
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; string s1,s2; void calc(int l1,int r1,int l2,int r2) { cout<<s2[r2]; int m=s1.find(s2[r2]); if (m>l1) calc(l1,m-1,l2,l2+m-l1-1); if (m<r1) calc(m+1,r1,l2+m-l1,r2-1); } int main() { cin>>s1>>s2; calc(0,s1.length()-1,0,s2.length()-1); cout<<endl; return 0; }