[2001年NOIP普及组] 求先序排列

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入
第一行输入一个字符串表示二叉树的中序排列,第二行输入一个字符串表示二叉树的后序排列。
输出
对于每组输入数据,输出二叉树的先序排列。
样例输入
BADC
BDCA
样例输出

ABCD

分析:后序排列一定是根节点在最后因此只要先找到整个树的根节点把树分为左右子树再输出根节点以此递归即可

首先先在中序遍历的字符串中找到树的根节点然后输出接着将左右子树递归即可

 

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
void il(string a,string b){
if (a.size()>0){
char ch=b[b.size()-1];//找根节点并输出
cout<<ch;
int m=a.find(ch);//找中序遍历里的根结点位置来分割树
il(a.substr(0,m),b.substr(0,m));//复制字符串
il(a.substr(m+1),b.substr(m,a.size()-m-1));
}
}
int main(){
string s1,s2;
cin>>s1;
cin>>s2;
il(s1,s2);cout<<endl;
return 0;
}

posted @ 2022-08-15 21:32  slyphiette  阅读(219)  评论(0)    收藏  举报