求后序遍历

北战南征 提交于 2020-03-08 01:05:29

描述

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

格式

输入格式

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

输出格式

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

样例

输入样例

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;
}

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!