Problem Description
树和二叉树基本上都有先序、中序、后序,层序遍历等遍历顺序,给定中序和其他一种遍历的序列就可以确定一棵二叉树的结构。假定一棵二叉树一个结点用一个字符描述,现在给出中序和层序遍历的字符串,求该树的先序遍历字符串。
Input
输入有多组数据,对于输入每组数据有两行,每行是由字母组成的字符串(一行的每个字符都是唯一的,长度不超过20),分别表示二叉树的中序遍历和层序遍历的序列。
Output
对于每组输入输出二叉树的先序序列。
Sample Input
DBEAC ABCDE
Sample Output
ABDEC
//标程:
#include<stdio.h> #include<string.h> int vis[260],len; char s[30],str[30]; void dg(int l,int r) { int k=1<<30,i,pos; if(l>r) return ; for(i=l;i<=r;i++) //在字符串s中根节点; { if(vis[s[i]]<k) { k=vis[s[i]]; pos=i; } } printf("%c",s[pos]); //先序遍历先输出 dg(l,pos-1); //左子树进行递归 dg(pos+1,r); //右子树进行递归 } int main() { //freopen("a.txt","r",stdin); while(scanf("%s%s",s,str)!=EOF) { int len=strlen(s),i; for(i=0;i<len;i++) vis[str[i]]=i; //对各个根节点进行编号; dg(0,len-1); printf("\n"); } return 0; }