当前位置: 代码迷 >> C语言 >> 一个建立二叉树的程序
  详细解决方案

一个建立二叉树的程序

热度:153   发布时间:2007-08-15 16:56:02.0
一个建立二叉树的程序

以下是我编的一个建立二叉树的程序:
我是一个C语言初学者,以下是我编的二叉树建立程序:
#include"stdio.h"
#include"malloc.h"
#define MAXSIZE 100
#define MAXNODE 15

typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

int Initiate(BiTree bt);
BiTree Creat(BiTree s[]);

void main()
{
int i;
BiTree array[MAXNODE],p;
p=Creat(array);
}

int Initiate(BiTree bt)
{
BiTree q;
if((bt=(BiTNode *)malloc(sizeof(BiTNode)))==NULL)
return 0;
bt->lchild=NULL;
bt->rchild=NULL;
return 1;
}

BiTree Creat(BiTree s[])
{
int i,n=MAXNODE;
for(i=1;i<n;i++)
Initiate(s[i]);
for(i=1;i<n/2;i++)
{
s[i]->lchild=s[2*i];
if((2*i)<n)
s[i]->rchild=s[2*i+1];
else s[i]->rchild=NULL;
}
return s[1];
}

编译,连接时都没错,但是一执行就要发送错误报告。我编的程序老是出现这种问题,急煞俺也!请各位高手,高手中的高手们指正。

搜索更多相关的解决方案: 二叉树  

----------------解决方案--------------------------------------------------------

这个我也觉得很奇怪,难道又是typedef的问题,哪位解决下?

在编译器中,明显这段有问题:
for(i=1;i<n/2;i++)
{
s[i]->lchild=s[2*i];
if((2*i)<n)
s[i]->rchild=s[2*i+1];
else s[i]->rchild=NULL;
}


----------------解决方案--------------------------------------------------------
void main()
{
int i;
BiTree array[MAXNODE],p;
for(i=0;i<MAXNODE;i++)
array[i]=(BiTNode *)malloc(sizeof(BiTNode));
p=Creat(array);
}

array[MAXNODE]没有分配内存空间
加上那两行后就好了
----------------解决方案--------------------------------------------------------
在函数Initiate中不是已经分配了吗???
----------------解决方案--------------------------------------------------------
谢谢各位
----------------解决方案--------------------------------------------------------
  相关解决方案