描述
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。
格式
输入格式
共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。
输出格式
一行,表示树的后序遍历序列。
样例
输入样例
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;
}
来源:CSDN
作者:julicliy
链接:https://blog.csdn.net/julicliy/article/details/104695155