二叉树中序和先序确定一个二叉树
二叉树中序和先序确定一个二叉树。。。。运行不出结果,麻烦各位帮忙看看、# include <stdio.h>
# include <string.h>
# include <conio.h>
#include <malloc.h>
#define MAX 50
typedef struct BiTNode /*定义二叉树节点结构*/
{ char data; /*数据域*/
struct BiTNode *LChild,*RChild; /*左右孩子指针域*/
}BiTNode,*BiTree;
int search(char a[MAX],char b[MAX])
{
for(int j=1;j<=12;j++)
if(a[j]==b[1])
return j;
}
int crtbt(BiTree T,char pre[MAX],char ino[MAX],int ps,int is,int n)
{
int k;
if(n==0) T=NULL;
k=search(ino,pre); //k为根在中序中的位置
if(k==-1) T=NULL;
else
T=(BiTree)malloc(sizeof(BiTNode));
T->data=pre[ps];
if(k==is) T->LChild=NULL; //根在中序中的第一位
else crtbt(T->LChild,pre,ino,ps+1,is,k-is);
if(k=is+n-1) T->RChild=NULL; //根在中序中的末位
else crtbt(T->RChild,pre,ino,ps+1+(k-is),k+1,n-(k-is)-1);
return 0;
}
void PrintTree(BiTree Boot,int n) /* 按竖向树状打印的二叉树 */
{ int i;
if(Boot==NULL) return;
PrintTree(Boot->RChild,n+1);
for( i=0;i<n;i++)
printf(" ");
printf("%c\n\n",Boot->data);
PrintTree(Boot->LChild,n+1);
}
int main()
{
int ps,is,n;
int m,i;
BiTree t;
t=(BiTree)malloc(sizeof(BiTree));
char h1[12]={'E','B','A','D','C','F','H','G','I','K','J'};
char h2[12]={'A','B','C','D','E','F','G','H','I','J','K'};
m=crtbt(t,h1,h2,ps,is,n);
PrintTree(t,i);
return 0;
}