[NOIP2001 普及组] 求先序排列
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 $ \le 8$)。
输入格式
共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
共一行一个字符串,表示一棵二叉树的先序。
样例 #1
样例输入 #1
BADC
BDCA
样例输出 #1
ABCD
提示
【题目来源】
NOIP 2001 普及组第三题
问题链接: P1030 [NOIP2001 普及组] 求先序排列
问题分析: 二叉树问题,不解释。
参考链接: (略)
题记: (略)
AC的C++语言程序如下:
/* P1030 [NOIP2001 普及组] 求先序排列 */
#include <iostream>
using namespace std;
string io, po;
void dfs(int l1, int r1, int l2, int r2)
{
if (l1 > r1 || l2 > r2) return;
int pos = io.find(po[r1]);
int cnt = pos - l2;
cout << po[r1];
dfs(l1, l1 + cnt - 1, l2, pos - 1);
dfs(l1 + cnt, r1 - 1, pos + 1, r2);
}
int main()
{
cin >> io >> po;
int len = io.size() - 1;
dfs(0, len, 0, len);
return 0;
}