题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,且二叉树的节点个数 ≤8)。
输入格式
共两行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
共一行一个字符串,表示一棵二叉树的先序。
输入输出样例
输入 #1复制
BADC BDCA
输出 #1复制
ABCD
说明/提示
【题目来源】
NOIP 2001 普及组第三题
#include<bits/stdc++.h>
using namespace std;
void f(string a, string b){
if(a.empty()) return;
char r = b[b.size()-1];
cout<<r;
int po=a.find(r);
f(a.substr(0,po),b.substr(0,po));
f(a.substr(po+1),b.substr(po,b.size()-po-1));
}
int main(){
string a,b;cin>>a>>b;
f(a,b);
return 0;
}
-
a:中序遍历字符串 -
b:后序遍历字符串
为什么在中序中找到的根节点位置 po 可以用于分割后序序列
----po 代表的是左子树的节点个数,这个数量在两个遍历序列中是相同的。

1277

被折叠的 条评论
为什么被折叠?



