给出一棵二叉树的中序与后序排列。
求出它的先序排列。
约定树结点用不同的大写字母表示.
输入格式
在一行内包含两个长度相同的由大写字母构成的字符串,分别表示给定二叉树的中序与后序排列。
输出格式
输出一行字符串,表示给定二叉树的先序排列。
数据范围
给定二叉树的节点数量 [1,8][1,8]。
输入样例:
BADC BDCA
输出样例:
ABCD
#include<bits/stdc++.h>
using namespace std;
vector<char> inorder;
vector<char> suf;
vector<char> pre;
string s;
void deal(int l1,int r1,vector<char> &suf,int l2,int r2,vector<char> &inorder)
{
int pos;
if(l1>r1) return ;
if(l1 == r1)
{
pre.push_back(suf[r1]);
return ;
}
for(int i = l2;i<=r2;i++)
{
if(inorder[i] == suf[r1])
{
pos = i;
break;
}
}
pre.push_back(suf[r1]);
deal(l1,r1-(r2-pos)-1,suf,l2,pos-1,inorder);//递归左子树
//pre.push_back(suf[r1]);
//deal(l1+pos,r1-1,suf,pos+1,r2,inorder);
deal(r1-(r2-pos),r1-1,suf,pos+1,r2,inorder);//递归右子树
}
int main()
{
cin>>s;
for(int i = 0;i<s.size();i++)
{
inorder.push_back(s[i]);
}
cin>>s;
for(int i = 0;i<s.size();i++)
{
suf.push_back(s[i]);
}
deal(0,suf.size()-1,suf,0,inorder.size()-1,inorder);
for(int i = 0;i<pre.size();i++)
{
cout<<pre[i];
}
return 0;
}