SDUT 1291数据结构上机测试4.1:二叉树的遍历与应用1

      坑爹的百度空间升级之后,成那个熊样了。。。所以,转战博客园。

   题目链接:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1291

   给出先序遍历和中序遍历,求后序遍历。代码参考白书上的。。

   思路:先序遍历中第一个肯定是根节点,找到在此节点在中序遍历的位置,则左边为左子树,右边为右子树。递归下去,用一个字符串,存下后序遍历的过程。

  

#include<stdio.h>
#include<string.h>
void build(int n,char *s1,char *s2,char *s)
{
    if(n<=0)return ;
    int i;
    for(i = 0;i <= n-1;i ++)
    {
        if(s1[0]==s2[i])
        break;
    }
    build(i,s1+1,s2,s);
    build(n-i-1,s1+i+1,s2+i+1,s+i);
    s[n-1]=s1[0];
}
int main()
{
    int a,b;
    char p1[1000],p2[1000],p3[1000];
    while(scanf("%s%s",p1,p2)!=EOF)
    {
        a=strlen(p1);
        build(a,p1,p2,p3);
        p3[a]='\0';
        printf("%s\n",p3);
    }
    return 0;
}

 

 

 

    

posted @ 2012-05-27 16:43  Naix_x  阅读(185)  评论(0)    收藏  举报