主题:各位高手,请帮我改一下这个数据结构,错在哪里呀?急!!!
#define NULL 0
#include<stdio.h>
#define char elemtype
typedef struct bitnode
{
elemtype data;
struct node *lc,*rc;
}bitnode,*bitree;
//bitree定义为二叉链表结构的指针类型
int init(bitree *bt)
{
if((*bt=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return 0;
*bt->rc=NULL;
*bt->lc=NULL;
return 1;
}
bitree creat(elemtype x,bitree lbt,bitree rbt)
{//生成以X为根结点的数据 值以LC,RC左右子树的二叉树
bitree p;
if( (p=(bitnode *)malloc(sizeof(bitnode)))=NULL)
p->data=x;
p->lc=lbt;
p->rc=rbt;
return p;
}
insetrl(bitree bt,elemtype x,bitree parent)
{//在二叉树BT的节点PARENT的左子树上插入节点数据元素为X
bitree p;
if(parent==NULL)
{
printf("\nthe insert is wrong");
return NULL;
}
if((p=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return NULL;
p->data=x;
p->lc=NULL;
p->rc=NULL;
if(parent->lc==NULL)
parent->lc=p;
else
{
p->lc=parent->lc;
parent->lc=p;
}
return bt;
}
insetrr(bitree bt,elemtype x,bitree parent)
{//在二叉树BT的节点PARENT的右子树上插入节点数据元素为X
bitree p;
if(parent==NULL)
{
printf("\nthe insert is wrong");
return NULL;
}
if((p=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return NULL;
p->data=x;
p->lc=NULL;
p->rc=NULL;
if(parent->rc==NULL)
parent->rc=p;
else
{
p->rc=parent->rc;
parent->rc=p;
}
return bt;
}
bitree deletel(bitree bt,bitree parent)
{//在二叉树中删除节点PARENT的左子树
bitree p;
if(parent==NULL||parent->lc==NULL)
{
printf("\nthe deletel for location is wrong");
return NULL;
}
p=parent->lc;
parent->lc=NULL;
free(p);//公释放所删除子树根结点的空间
}
bitree deleter(bitree bt,bitree parent)
{//在二叉树中删除节点PARENT的右子树
bitree p;
if(parent==NULL||parent->rc==NULL)
{
printf("\nthe deleter for location is wrong");
return NULL;
}
p=parent->rc;
parent->rc=NULL;
free(p);//公释放所删除子树根结点的空间
}
/*search(bitree bt,elemtype x)
{
}*/
void inorder(bitree bt)
{
if(bt==NULL)
return ;//结束的条件
inorder(bt->lc);
visit(bt->data);
inorder(bt->rc);
}
void visit(elemtype x)
{
printf("节点的值为%c\n",x);
}
void main()
{//创立一个以A根节点B,C分别为左右子树的二叉树,哪有错呀
bitree *bt;
init(bt);
creat(a,NULL,NULL);
}
#include<stdio.h>
#define char elemtype
typedef struct bitnode
{
elemtype data;
struct node *lc,*rc;
}bitnode,*bitree;
//bitree定义为二叉链表结构的指针类型
int init(bitree *bt)
{
if((*bt=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return 0;
*bt->rc=NULL;
*bt->lc=NULL;
return 1;
}
bitree creat(elemtype x,bitree lbt,bitree rbt)
{//生成以X为根结点的数据 值以LC,RC左右子树的二叉树
bitree p;
if( (p=(bitnode *)malloc(sizeof(bitnode)))=NULL)
p->data=x;
p->lc=lbt;
p->rc=rbt;
return p;
}
insetrl(bitree bt,elemtype x,bitree parent)
{//在二叉树BT的节点PARENT的左子树上插入节点数据元素为X
bitree p;
if(parent==NULL)
{
printf("\nthe insert is wrong");
return NULL;
}
if((p=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return NULL;
p->data=x;
p->lc=NULL;
p->rc=NULL;
if(parent->lc==NULL)
parent->lc=p;
else
{
p->lc=parent->lc;
parent->lc=p;
}
return bt;
}
insetrr(bitree bt,elemtype x,bitree parent)
{//在二叉树BT的节点PARENT的右子树上插入节点数据元素为X
bitree p;
if(parent==NULL)
{
printf("\nthe insert is wrong");
return NULL;
}
if((p=(bitnode *)malloc(sizeof)(bitnode)))==NULL)
return NULL;
p->data=x;
p->lc=NULL;
p->rc=NULL;
if(parent->rc==NULL)
parent->rc=p;
else
{
p->rc=parent->rc;
parent->rc=p;
}
return bt;
}
bitree deletel(bitree bt,bitree parent)
{//在二叉树中删除节点PARENT的左子树
bitree p;
if(parent==NULL||parent->lc==NULL)
{
printf("\nthe deletel for location is wrong");
return NULL;
}
p=parent->lc;
parent->lc=NULL;
free(p);//公释放所删除子树根结点的空间
}
bitree deleter(bitree bt,bitree parent)
{//在二叉树中删除节点PARENT的右子树
bitree p;
if(parent==NULL||parent->rc==NULL)
{
printf("\nthe deleter for location is wrong");
return NULL;
}
p=parent->rc;
parent->rc=NULL;
free(p);//公释放所删除子树根结点的空间
}
/*search(bitree bt,elemtype x)
{
}*/
void inorder(bitree bt)
{
if(bt==NULL)
return ;//结束的条件
inorder(bt->lc);
visit(bt->data);
inorder(bt->rc);
}
void visit(elemtype x)
{
printf("节点的值为%c\n",x);
}
void main()
{//创立一个以A根节点B,C分别为左右子树的二叉树,哪有错呀
bitree *bt;
init(bt);
creat(a,NULL,NULL);
}