【NOIP】求先序排列
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 ≤8)。
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入 #1 复制
BADC
BDCA
输出 #1 复制
ABCD
分析
水题, 给出中序和后序,求前序,上课的时候学树的结构学到了。。。
这里用了string的几个用法,不了解的可以看看。
string s = “abc”;
char k = ‘b’;
s.find(k); //在字符串s中查找k的对应位置(从0开始),这里是1.
s.substr(0,k) //想当于创建 一个新的字符串 它的内容是 字符串s的从0位置开始到往后k位置(不含k),
//这里是a
代码
#include<iostream>
using namespace std;
#include<cstring>
string s1,s2;
void f(string s1,string s2){
if(s1.size()>0){
char root = s2[s2.size()-1] ;
cout<<root;
int k = s1.find(root);
f(s1.substr(0,k),s2.substr(0,k));
f(s1.substr(k+1),s2.substr(k,s2.size()-k-1));
}
}
int main(){
cin>>s1>>s2;
f(s1,s2);
return 0;
}