写了一个用先序序列和中序序列确定一颗二叉树的代码
但是结构体部分好像出现了问题,刚开始学不久,找了很久都没有找的问题在哪,请大家帮忙看下,然后结构体引用的时候总是弹不出成员列表,不知道为什么
# include <stdio.h>
# include <malloc.h>
# include <string.h>
void exit(int);
# define MAX 100
typedef struct node
{
char d;
struct node *lchild, *rchild;
}Tnode;
void MK(char in[], char is, char ie, char pre[], char pres, char pree, Tnode**r) //is第一个值。ie最后一个值
{
int i;
if (is>ie || pres>pree)
*r=NULL;
else
{
*r = (Tnode*)malloc(sizeof(Tnode))
(*r)->d = pre[pres]; //确定根节点
for (i=is;i<=ie;i++)
{
if(in[i]==pre[pres]) //在中序遍历中找到根节点,来确定左右子树
MK(in,is,i-1,pre,pres+1,pres+i-is,&(*r)->lchild); //左子树
MK(in,i+1,ie,pre,pres+i-is+1,pree,&(*r)->rchild);
break;
}
if(i>ie)
{ //没有找到根节点
printf("输入错误");
exit(1);
}
}
}
void postorder(Tnode *r) //遍历输出树的后序序列
{
if(r)
{
postorder(r->lchild);
postorder(r->rchild);
printf("%c",r->d);
}
}
int leaf(Tnode*r)
{
if(r==NULL)
return 0;
else if(r->lchild==NULL && r->rchild==NULL)
return 1;
else
return leaf(r->rchild)+leaf(r->lchild);
}
int height(Tnode*r)
{
int h1,h2;
if (r==NULL)
return 0;
else
{
h1 = height(r->lchild);
h2 = height(r->rchild);
return 1+(h1>h2?h1:h2);
}
}
int main()
{
Tnode* r = NULL;
char in[MAX], pre[MAX];
printf("请输入前序序列");
gets(pre);
printf("请输入中序序列");
gets(in);
MK(in,0,strlen(in)-1,pre,0,strlen(pre)-1,&r);
printf("\n后续遍历序列为:\n");
postorder(r);
printf("\n叶节点的个数为:%d\n",leaf(r));
printf("\n高度为%d\n",height(r));
return 0;
}
错误信息23行 [Error] expression cannot be used as a function