分析:
通过前序和中序确定一颗树,让后对这棵树进行后续遍历。
看看样例:
中序:ABEDFCHG
先序:CBADEFGH
因为先序的第一个必定为根,所以C肯定是根。
中序呢,就是把根左边的遍历完,然后根,然后再遍历根右边的。
所以在中序中以C为分界点,左边为ABCEDF,根C,右边HG.
然后按照先序把点都分好。
C 左边:ABEDF 右边:HG
B 左边A 右边:EDF
A 左右为空,是叶子节点
D 左边E 右边F
E 叶子节点
F 叶子节点
G 左边H
H叶子节点
因此,我们只需要按先序的顺序,在中序中找到点,这就可以还原这棵树了。
#include<stdio.h>
#include<string.h>
struct tree
{
char data;
int r;
int l;
}trees[30];
struct tree node[30];
char prep[30];
char mid[30];
int num=-1;
int find(int begin,int end)
{
if(begin>end) return -1;
int i;
num++;
for(i=begin;i<=end;i++)
{
if(prep[num]==mid[i]) break;
}
if(i>end) return -1;
node[i].data=prep[num];
node[i].l=find(begin,i-1);
node[