《求先序排列》解题报告
by MPS
---------------------------------------------------------------------------------------------------------------------------------------------------------
题目描述 Description
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入描述 Input Description
两个字符串,分别是中序和后序(每行一个)
输出描述 Output Description
一个字符串,先序
样例输入 Sample Input
BADC
BDCA
样例输出 Sample Output
ABCD
首先讲解对于给出后序、中序,求前序的算法:
找到后序的第一个,即为根,在中序中找到后序的第一个字符的位置,左边的为根的左子树,右边的为根的右子树反复多次即可求出。
我们将反复交给递归处理,其余的就是递归之前的处理内容了。
#include <iostream>
using namespace std;
#include <cstdio>
#include <string>
string s1,s2;
void work(string mid,string last){
int i,p;
cout<<last[last.size()-1];
p=mid.find(last[last.size()-1]);
if(p>0)work(mid.substr(0,p),last.substr(0,p));
if(p+1<=mid.size()-1)work(mid.substr(p+1,mid.size()-p),last.substr(p,last.size()-1-p));
}
int main(){
cin>>s1>>s2;
work(s1,s2);
return 0;
}
-------------------------------------------fin------------------------------------------------------