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

  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 }

 

 

你可能感兴趣的:(二叉树)