二叉树前序遍历+中序遍历->后序遍历
BNU的基础题,数据结构的基础题,顺便搞下.
二叉树是一种常用的数据结构。我们可以用大写的英文字母表示二叉树的节点。
如下:
B / \ / \ C A \ \ D
对于二叉树,有前序、中序和后序三种遍历方式。 现在给你一棵二叉树的前序和中序遍历,请你求出这棵二叉树的后序遍历结果。
Input
输入数据有多组,每组数据一行。
每行由两个字符串组成(每个字符串长度最大为26)。表示一棵二叉树的前序和中序遍历结果。
题目保证前序和中序遍历是合法的(即肯定可以确定一棵二叉树)。
Output
对于每组输入,输出对应的二叉树的后序遍历结果。
注意:本题输入输出都在控制台中,使用标准输入输出函数即可,不需要读写文件。
Sample Input
BCAD CBAD ABDGKLRVWSXCEHMNFIOTUJPYQZ KGVRWLSXDBAMHNECTOUIFPYJZQ
Sample Output
CDAB KVWRXSLGDBMNHETUOIYPZQJFCA
Source
以前一直不会写这样的题,但是看了别人的代码,感觉递归的意义我还是没有很好的理解
代码:
1 #include <stdio.h> 2 #include <string.h> 3 4 char s1[30], s2[30]; 5 int cnt; 6 7 void tree(int left, int right, char ch) 8 { 9 for (int i = left; i<right; i++){ 10 if (s2[i] == ch){ 11 if (left < i) 12 tree(left, i, s1[cnt++]); 13 if (i+1 < right) 14 tree(i+1, right, s1[cnt++]); 15 printf("%c", ch); 16 break; 17 } 18 } 19 } 20 21 22 int main(void) 23 { 24 while (scanf("%s%s",s1,s2) != EOF) 25 { 26 cnt = 0; 27 tree(0, strlen(s1), s1[cnt++]); 28 printf("\n"); 29 } 30 return 0; 31 }