 程序代码:
程序代码:#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;
}										
					
	
迭代的是人,递归的是神。



 
											







 
	    

 
	

 
										
					
	
 二叉树.zip
二叉树.zip

 
										
					
	
 
										
					
	 留个名
留个名