P1030 题解
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 \le 8≤8)。
输入输出格式
输入格式:
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式:
1行,表示一棵二叉树的先序。
输入输出样例
输入样例#1:
BADC
BDCA
输出样例#1:
ABCD
思路是从后序里面找根,然后从中序中找树
eg:后序CBDA 中序CBAD
A为根,然后从中序中找到A的位置,此时以A为轴将中序分为了两个树,CB和D
此时除去A,后序CBD,D为下一个根
以此循环递归下去就可以得到答案。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <map>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
void pre(string s,string s1)
{
int i;
char ch;
if(s.size()<=0) return ; //判断函数结束条件
ch=s1[s1.size()-1]; //输出此时后序字符串最后一个字符,也就是根
cout << ch;
for(i=0;i<s.size();i++){
if(s[i]==ch) break;
}
//利用函数substr划分区间
pre(s.substr(0,i),s1.substr(0,i)); //左
pre(s.substr(i+1),s1.substr(i,s.size()-i-1)); //右
}
int main()
{
string s,s1;
cin >> s >> s1;
pre(s,s1);
return 0;
}