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

  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 }

 

 

转载于:https://www.cnblogs.com/wikioibai/p/4456154.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值