Poj 2255-Tree Recovery//二叉树,递归

来源:互联网 发布:淘宝里怎么上架货 编辑:程序博客网 时间:2024/06/15 09:24

    这道题思路很简单,但是不好写递归!自己的递归思想弱爆了。

    每次将先序和中序分为两个部分,一个是左子树,一个是右子树。不断的递归到结束为止!

    下面是代码:

    

#include<stdio.h>#include<string.h>#define MAXN 100char 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;}
菜鸟的自己!