求先序排列
求先序排列
Time Limit:1000MS Memory Limit:65536K
Description
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度 <= 8)。
Input
中序与后序排列,中间用空格隔开
Output
先序排列
Sample Input
BADC BDCA
Sample Output
ABCD
Source
NOIP2001年第七届全国青少年信息学(计算机)奥林匹克分区联赛复赛普及组试题3
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 char sa[10],sb[10]; 6 int len; 7 int find(char ch){ 8 int i; 9 for(i=0;i<len;i++){ 10 if(sa[i]==ch)return i; 11 } 12 } 13 void DFS(int la,int ra,int lb,int rb){ 14 int m=find(sb[rb]); 15 cout<<sb[rb]; 16 if(m>la)DFS(la,m-1,lb,rb-ra+m-1); 17 if(m<ra)DFS(m+1,ra,lb+m-la,rb-1); 18 } 19 int main(){ 20 cin>>sa; 21 cin>>sb; 22 len=strlen(sa); 23 DFS(0,len-1,0,len-1); 24 return 0;}