#include <stdlib.h>
#include <stdio.h>
#define maxsize 100
typedef char datatype;
typedef struct node {
datatype data;
struct node *lchild, *rchild;
} bitree;
bitree *BPI(datatype preod[], datatype inod[], int i, int j, int k, int h)
{
int m;
bitree *p;
p = (bitree *)malloc(sizeof(bitree));
p->data = preod[i];
m = k;
while (inod[m] != preod[i])
m++;
if (m == k)
p->lchild = NULL;
else
p->lchild = BPI(preod, inod, i + 1, i + m - k, k, m - 1);
if (m == h)
p->rchild = NULL;
else
p->rchild = BPI(preod, inod, i + m - k + 1, j, m + 1, h);
return (p);
}
void show(bitree *t) {
if (t == NULL)
return;
show((t->lchild));
show((t->rchild));
printf("%2c", t->data);
}
int main() {
bitree *T;
datatype preod[maxsize];
datatype inod[maxsize];
int i, j, n;
printf("输入结点个数");
scanf("%d", &n);
printf("请输入前序\n");
_flushall();
for (i = 0; i < n; i++) {
scanf("%c", &preod[i]);
}
printf("请输入中序\n");
_flushall();
for (j = 0; j < n; j++) {
scanf("%c", &inod[j]);
}
T = BPI(preod, inod, 0, n - 1, 0, n - 1);
printf("后序输出二叉树:\n");
show(T);
return 0;
}