洛谷P1030 求先序排列
[NOIP2001 普及组] 求先序排列
文章目录
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 $ \le 8$)。
输入格式
共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
共一行一个字符串,表示一棵二叉树的先序。
样例 #1
样例输入 #1
BADC
BDCA
样例输出 #1
ABCD
提示
【题目来源】
NOIP 2001 普及组第三题
正确代码
c++
#include <bits/stdc++.h>
using namespace std;
/**
*author: 枫飘长安
*date: 2024/4/14
*fileName: P1030.cpp
*description: TODO
**/
typedef long long ll;
const int MAXN = 1e6+10;
string inord,postord;
void beforeOrder(string in, string after);
int main (){
cin >> inord >> postord;
beforeOrder(inord,postord);
return 0;
}
void beforeOrder(string in, string after) {
if (in.size() == 0) return;
char root = after[after.size()-1];
cout << root;
int pos = in.find(root);
beforeOrder(in.substr(0,pos),after.substr(0,pos));
beforeOrder(in.substr(pos+1),after.substr(pos,after.size()-pos-1));
}