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;

}

 

 

 

    

你可能感兴趣的:(数据结构)