回 帖 发 新 帖 刷新版面

主题:各位高手,请帮我改一下这个数据结构,错在哪里呀?急!!!

#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);

}

回复列表 (共1个回复)

沙发

哈哈,满世界的vc java之类,
有这么认真学数据结构的,真不错,我喜欢,让我想起以前为了一个指针问题,
郁闷的调试一个星期的心情!

我来回复

您尚未登录,请登录后再回复。点此登录或注册