程序代码:#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct BTree
{
char n;
BTree *l;
BTree *r;
};
char put[100];//用于保存后序序列
int iput = 0;
/*先在前缀中确定子树树根,再在中序中找到这个树根的位置,并判断左右孩子的情况*/
void greateBT(BTree *root, char *nlr, char *lnr, int n)
{
if(n)
{
//因为要后序输出,所以左右子树的创建顺序不能变动。
root->n = *nlr;
char *p = strchr(lnr,root->n);//p保存根在中序序列中的位置
int ln = p-lnr;//左子树的序列长度
if(ln){
root->l = (BTree*) calloc(1,sizeof(BTree));
greateBT(root->l, nlr+1, lnr, ln);//创建左子树
}
int rn = n-1-ln;
if(rn){
root->r = (BTree*) calloc(1,sizeof(BTree));
greateBT(root->r, p-lnr+nlr+1, p+1, rn);//创建右子树
}
}
put[iput++] = root->n;//为后序输出做准备
}
int main()
{
char nlr[10];//先序序列
char lnr[10];//中序序列
printf("%s\n","输入先序和中序");
scanf("%s%s",nlr,lnr);
BTree *root = (BTree*) calloc(1,sizeof(BTree));
greateBT(root,nlr,lnr,strlen(nlr));
printf("%s\n",put);
return 0;
}

迭代的是人,递归的是神。









留个名