题目描述
题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。
输入
输入有多组数据(少于100组),以文件结尾结束。 每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。
输出
每组输出数据单独占一行,输出对应得先序序列。
样例输入
ACBFGED ABCDEFG
CDAB CBAD
样例输出
DBACEGF
BCAD
题解:以在中序遍历中寻找根为切入点,把二叉树分为左右两部分,然后把这两部分又分别作为做为一个新的二叉树;
注:后序遍历的最后一个节点总为根节点。。。没说错吧
代码:
#include <iostream> #include<cstring> #include<cstdio> using namespace std; void toPre(char post[],char in[],int len){ if(len<=0) return; int i,n; char root=post[len-1]; for(i=0;i<len;i++){ if(root==in[i]){ n=i; break; } } cout<<root; toPre(post,in,n);//将左子树作为一颗新的二叉树,并在左子树中寻找他的根节点 toPre(post+n,in+n+1,len-n-1);//将右子树作为一颗新的二叉树,并在右子树中寻找他的根节点 } int main() { char in[27],post[27]; while(~scanf("%s%s",post,in)){ int len=strlen(in); toPre(post,in,len); printf(" "); } return 0; }