方法一:构建二叉树方法
#include<bits/stdc++.h>
using namespace std;
char zh[20],hou[20],qi[20];
struct node{
char le;
node *l;
node *r;
};
int chazhao(char zh[],char ch)
{
for(int i = 0; i < strlen(zh); i++)
if(zh[i]==ch) {
return i;
}
}
void work(node *q,char *zh ,char *hou)
{
if(strlen(zh)==0){
// q = NULL;
q->le = '0';
q->l = NULL;
q->r = NULL;
return;
}
int mid = chazhao(zh,hou[strlen(hou)-1]);
q->le = hou[strlen(hou)-1];
node *lc=new node,*rc=new node;
lc->l=NULL;lc->r=NULL;
rc->l=NULL;rc->r=NULL;
q->l = lc;
q->r = rc;
char zhl[20],zhr[20],houl[20],hour[20];
// A
// A
strncpy(zhl,zh,mid);zhl[mid] = '\0';//DBFE
strncpy(zhr,zh+mid+1,strlen(zh)-mid-1);zhr[strlen(zh)-mid-1] = '\0';//CG
strncpy(houl,hou,mid);houl[mid] = '\0';//DFEB
strncpy(hour,hou+mid,strlen(zh)-mid-1);hour[strlen(zh)-mid-1] = '\0'; //GC
work(q->l,zhl,houl);
work(q->r,zhr,hour);
}
void qian(node *p)
{
if(p->le=='0')return ;
cout << p->le << " ";
qian(p->l);
qian(p->r);
}
int main()
{
cin>> zh;
cin >> hou;
node *p=new node;
p->l=NULL;
p->r=NULL;
work(p,zh,hou);
qian(p);
return 0;
}
/*
DBFEACG
DFEBGCA
*/
方法二 直接递归
#include<iostream>
using namespace std;
char post[]="DFEBGCA";
char mid[]="DBFEACG";
void pre(int root, int start, int end) //当前树的根节点在后序里的下标 中序中的起始位置 结束位置
{
if(end-start<0) return ;
int i=start;
for(i = start; i<=end; i++) //寻找中序序列中根节点的位置
if(mid[i]==post[root]) break;
printf("%c ", post[root]);
pre(root-1-(end-i),start,i-1); //查询左子树
pre(root-1,i+1,end); //查询右子树
}
int main()
{
pre(6,0,6);
return 0;
}