题目大意:
输入二叉树的前序、中序遍历,请输出它的后序遍历
#include <stdio.h> #include <string.h> ; // 长度为n s1 前序 s2 中序 构造后序s3 void build(int n, char * s1, char * s2, char * s3) { ) return; ]) - s2; //找到根节点在中序遍历中的位置 build(p, s1 + , s2, s3); //递归左子树的后序遍历 build(n - p - , s1 + p + , s2 + p + , s3 + p); //递归右子树的后序遍历 s3[n - ] = s1[]; //把根节点添加到最后 } int main() { int n; char s1[MAXN], s2[MAXN], s3[MAXN]; while (scanf("%d",&n)!=EOF) { scanf("%s%s", s1, s2); build(n, s1, s2, s3); s3[n] = '\0'; //这一步一定要注意 printf("%s\n", s3); } ; }
2018-04-01