二叉树前序遍历+中序遍历->后序遍历

  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 }

 

 

posted @ 2015-04-25 16:45  BYYB_0506  阅读(668)  评论(0编辑  收藏  举报