编了一下,还是搞不出正确结果....我这人活的太悲哀了
// creattree.c.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "string.h"
#define
N
40
typedef
struct node
{
char
data;
struct
node
*lchild;
struct
node
*rchild;
}binnode;
typedef
binnode *bintree;
bintree
creat(char preorde[],char inorde[],int n)
{
bintree t;
char lp[N],li[N],rp[N],ri[N];
int m,i;
if(n==0)
return NULL;
t=(bintree)malloc(sizeof(binnode));
t->data=preorde[0];
for(m=0;m<n;m++)
{
if(inorde[m]=t->data )
break;//m就是根结点在中序的位置
}
//得到左子树的前序和中序
for(i=0;i<m;i++)
lp=preorde[i+1];
for(i=0;i<m;i++)
li=inorde;
//得到右子树的前序和中序
for(i=0;i<n-m+1;i++)
rp=preorde[i+m+1];
for(i=0;i<n-m+1;i++)
ri=inorde[i+m+1];
t->lchild =creat(lp,li,m);
t->rchild =creat(rp,ri,n-m-1);
return t;
}
void
postorde(bintree t)
{
if(t)
{
postorde(t->lchild );
postorde(t->rchild );
printf("%c",t->data );
}
}
void
preorde1(bintree t)
{
if(t)
{
printf("%c",t->data );
postorde(t->lchild );
postorde(t->rchild );
}
}
int main()
{
char preorde[N],inorde[N];
bintree t;
int n;
printf("请输入二叉树的前序遍历:");
gets(preorde);
printf("请输入二叉树的中序遍历:");
gets(inorde);
n=strlen(preorde);
t=creat(preorde,inorde,n);/*建树*/
printf("二叉树后序遍历:");
postorde(t);
printf("\n二叉树前序遍历:");
preorde1(t);
getch();
return 0;
}