题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。
输入格式
22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
11行,表示一棵二叉树的先序。
输入输出样例
输入
BADC
BDCA
输出
ABCD
说明/提示
【题目来源】
NOIP 2001 普及组第三题
AC代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstdlib>
using namespace std;
string in,last;//中序序列 后序序列
struct node{
char data;
node* Lchild;
node* Rchild;
}*tree;
int num;
void buildtree(node* &root,string s){
if(s==""){
root=NULL;
return;
}
root=new node;
int flat,word=0;;
for(int i=num-1;i>=0;i--){
for(int j=0;j<s.size();j++){
if(last[i]==s[j]){
flat=i;
word=1;
break;
}
}
if(word==1) break;
}
root->data=last[flat];
int sum=s.find(last[flat]);
buildtree(root->Lchild,s.substr(0,sum));
buildtree(root->Rchild,s.substr(sum+1,num-sum-1));
}
void pre(node *root){
if(root!=NULL){
cout<<root->data;
pre(root->Lchild);
pre(root->Rchild);
}
}
int main(){
cin>>in>>last;
num=last.size();
buildtree(tree,in);
pre(tree);
}