这道题思路很简单,但是不好写递归!自己的递归思想弱爆了。
每次将先序和中序分为两个部分,一个是左子树,一个是右子树。不断的递归到结束为止!
下面是代码:
#include<stdio.h>
#include<string.h>
#define MAXN 100
char s1[MAXN],s2[MAXN],s[MAXN];
void rebuild(int n,char *s1,char *s2,char *s)//n是每次根结点要插入的位置,总是最后一个位置,最终n会为0
{
if(n<=0) return;
int p=strchr(s2,s1[0])-s2;//找到根结点在中序遍历中的位置
//将树拆为两个部分
rebuild(p,s1+1,s2,s);//构建左子树
rebuild(n-p-1,s1+p+1,s2+p+1,s+p);//构建右子树
s[n-1]=s1[0];
}
int main()
{
while(scanf("%s%s",s1,s2)!=EOF)
{
int N=strlen(s1);
rebuild(N,s1,s2,s);
s[N]='\0';
printf("%s\n",s);
}
return 0;
}
菜鸟的自己!