【问题描述】
假定一棵二叉树的每个结点都用一个大写字母描述。
给定这棵二叉树的先序遍历和中序遍历,求其后序遍历。
下图是依据下文算法代码绘制的示意图。
【输入格式】
输入包含多组测试数据。
每组数据占两行,每行包含一个大写字母构成的字符串,第一行表示二叉树的先序遍历,第二行表示二叉树的中序遍历。
【输出格式】
每组数据输出一行,一个字符串,表示二叉树的后序遍历。
【数据范围】
输入字符串的长度均不超过 26。
【输入样例】
ABC
BAC
FDXEAG
XDEFAG
【输出样例】
BCA
XEDGAF
【算法代码】
#include <bits/stdc++.h>
using namespace std;string s1,s2;//Preorder length b1~e1 <-> Inorder length b2~e2
void cal(int b1,int e1,int b2,int e2) {if(b1>e1) return; int m=s2.find(s1[b1]);cal(b1+1,b1+m-b2,b2,m-1);cal(b1+m-b2+1,e1,m+1,e2);cout<<s1[b1];
}int main() {while(cin>>s1>>s2) {cal(0,s1.length()-1,0,s2.length()-1);cout<<endl;}return 0;
}/*
in:
ABC
BAC
FDXEAG
XDEFAGout:
BCA
XEDGAF
*/
【参考文献】
https://blog.csdn.net/STRVE/article/details/105539535