自用。
题目传送门:[NOIP2001 普及组] 求先序排列 - 洛谷
题解:Inori_333
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8)。
输入格式
共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
共一行一个字符串,表示一棵二叉树的先序。
输入输出样例
输入 #1
BADC
BDCA
输出 #1
ABCD
说明/提示
【题目来源】
NOIP 2001 普及组第三题
/*
P1030 [NOIP2001 普及组] 求先序排列
https://www.luogu.com.cn/problem/P1030
2024/10/03 submit:Inori333
*/
#include<bits/stdc++.h>
using namespace std;
// 例:中序ACGDBHZKX,后序CDGAHXKZB
void preorder(string in,string post){
if(in.size()>0){
char curroot = post[post.size() - 1];
cout << curroot;
int split = in.find(curroot);
//遍历当前root的左子树
preorder(in.substr(0, split), post.substr(0, split));
//遍历当前root的右子树
preorder(in.substr(split + 1), post.substr(split,in.size()-split-1));//右子树序列=当前树-左子树-根节点
}
}
int main(){
string inseq, postseq;
cin >> inseq;
cin >> postseq;
preorder(inseq, postseq);
return 0;
}