1034: 递归4(二叉树的后序遍历)

时间限制: 1 Sec 内存限制: 128 MB
提交: 597 解决: 429
[提交][状态][讨论版]
题目描述
【题意】
二叉树是每个内部结点最多只有两个子结点且两个子结点有序的树。如下图就是一棵二叉树:
这里写图片描述

对于一棵二叉树,有三种基本遍历方式:
1.前序遍历:先访问根结点,然后再前序遍历左子树,最后前序遍历右子树;
2.中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树;
3.后序遍历:先后序遍历左子树,然后后序遍历右子树,最后访问根结点。
对于上图,前序遍历的结果是ABDEHCFGI。中序遍历的结果是DBEHAFCIG,后序遍历的结果是DHEBFIGCA。
现在给出二叉树的前序和中序遍历,请输出相应的后序遍历。

【输入格式】
第一行前序遍历的结果
第二行中序遍历的结果
都是大写字母,且结点的标识不重复,最多只有100个结点。
【输出格式】
输出后序遍历的结果
【输入样例】
ABDEHCFGI
DBEHAFCIG
【输出样例】
DHEBFIGCA
之前也写过二叉树的遍历的问题,这题是先序中序求后序的遍历结果,也是用的递归的思路。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
char a[100],b[100],c[100];
int al,bl,k[100],l;
void dfs(int la,int ra,int lb,int rb)
{
    if(la>ra) return ;
    int t=k[a[la]]-lb;
    dfs(la+1,la+t,lb,k[a[la]]-1);
    dfs(la+t+1,ra,k[a[la]]+1,rb);
      c[++l]=a[la];
}
int main()
{
    scanf("%s",a+1),al=strlen(a+1);
    scanf("%s",b+1),bl=strlen(b+1);
    for(int i=1;i<=bl;i++)
         k[b[i]]=i;l=0;
     dfs(1,al,1,bl);
     for(int i=1;i<=l;i++)
           printf("%c",c[i]);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值