题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入 #1复制
BADC BDCA
输出 #1复制
ABCD
思路:用分治递归,这道题的关键在与找根,根是后序排序的最后一个,在中序排序中,根是左子树与右子树的中点。
可以通过在后续排序中找到根,将中序排序分为左子树与右子树,再根据左右子树,将后序排序分为左右子树。此时,后序排序的最后一个仍为根。重复递归即可!
#include <iostream>
#include <math.h>
#include <algorithm>
#include <stack>
#include <string.h>
#include <vector>
#include <cstring>
using namespace std;
string a,b;
int k=0;
void dfs(string m,string e) {
if(m.size()>0)
{
cout<<e[e.size()-1];
k++;
int tmp=m.find(e[e.size()-1]);
dfs(m.substr(0,tmp),e.substr(0,tmp));
dfs(m.substr(tmp+1),e.substr(tmp,e.size()-1-tmp));
}
}
int main() {
cin>>a>>b;
dfs(a,b);
return 0;
}