中序遍历跟后序遍历求出前序遍历
/*
中序遍历跟后序遍历求出前序遍历
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char inord[30],suford[30];
void fun(int lsuf,int rsuf,int lin,int rin)
{
int root,ls,rs;
for(root=lin;root<=rin;root++){
if(inord[root]==suford[rsuf]){
break;
}
}
ls=root-lin;
rs=rin-root;
printf("%c",inord[root]);
if(ls>0)
fun(lsuf,lsuf+ls-1,lin,root-1);
if(rs>0)
fun(lsuf+ls,rsuf-1,root+1,rin);
}
int main()
{
while(~scanf("%s%s",suford,inord)){
int len=strlen(inord)-1;
fun(0,len,0,len);
printf("\n");
}
return 0;
}
/*
ACBFGED ABCDEFG
DBACEGF
CDAB CBAD
BCAD
*/
前序遍历跟中序遍历求出后序遍历
/*
前序遍历跟中序遍历求出后序遍历
*/
#include <cstdio>
#include <iostream>
#include<cstring>
using namespace std;
char preord[30],inord[30];
void fun(int lpre,int rpre,int lin,int rin)
{
int root,ls,rs;
for(root=lin;root<=rin;root++){
if(inord[root]==preord[lpre]){
break;
}
}
ls=root-lin;
rs=rin-root;
if(ls>0)
fun(lpre+1,lpre+ls,lin,root-1);
if(rs>0)
fun(lpre+1+ls,rpre,root+1,rin);
printf("%c",inord[root]);
}
int main()
{
while(scanf("%s%s",preord,inord)!=EOF){
int len=strlen(preord)-1;
fun(0,len,0,len);
printf("\n");
}
return 0;
}
/*
DBACEGF ABCDEFG
ACBFGED
BCAD CBAD
CDAB
*/