求后序遍历

描述

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

格式

输入格式

共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

输出格式

一行,表示树的后序遍历序列。

样例

输入样例

abdec
dbeac

输出样例

debca

 

#include <iostream>
#include <stdio.h>
#include <cstring>  
#include <stdio.h>
#include <algorithm>
#include <cmath>
using namespace std;

//abdhecfg
//hdbeafcg
//hdebfgca

char pre[100],mid[100],rear[100];

int find(char a[],int x){
	int len = strlen(a);
	for(int i=0; i<len; ++i){
		if(a[i] == x){
			return i;
		}
	}
	return -1;
}

void solve(char a[], char b[],int as, int ae, int bs, int be){	
	int m = find(b, a[as]);	
//	printf("m = %c\n",b[m]);
	if(m == -1){
		return ;
	}
	int i;
	char c[100];
	char d[100];
	char e[100];
	char f[100];
	for(i=1; i<=m; i++){
		c[i-1] = a[i];
	}
	c[i-1] = '\0';
	for(i=0; i<=m-1; ++i ){
		d[i] = b[i];
	}
	d[i] = '\0';
	
	for(i=m+1; i<=ae; ++i){
		e[i-m-1] = a[i];
	}
	e[i-m-1] = '\0';
	for(i=m+1; i<=be; ++i){
		f[i-m-1] = b[i];
	}
	f[i-m-1] = '\0';	

	if(m>=0)
		solve(c,d,0,m,0,m);
	if(be-m-1>=0)
		solve(e,f, 0, ae-m-1, 0, be-m-1);	
	printf("%c", b[m]);
	
}

int main(){
	cin>>pre>>mid;
	int lena = strlen(pre);
	int lenb = strlen(mid);
	
	solve(pre, mid, 0, lena-1, 0, lenb-1);
	
	return 0;
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值