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; }