| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:求各位高手帮看一段二叉树程序
取消只看楼主 加入收藏
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求各位高手帮看一段二叉树程序
#include <stdio.h>
#include <stdlib.h>

typedef struct BiTree
{
    int elem;
    struct BiTree *Lchild;
    struct BiTree *Rchild;
}BiNode;

void BiT_Create(BiNode *T,int x)
{
    BiNode *Temp;
    BiNode *New;

    Temp=T;
    if(T->elem==-1)
    {
        T->elem=x;
        T->Lchild=NULL;
        T->Rchild=NULL;
        return;
    }
    else if(Temp->elem>=x)
    {
        if(Temp->Lchild==NULL)
        {
            if((New=(BiNode*)malloc(sizeof(BiNode)))!=NULL)
            {
                New->elem=x;
                New->Lchild=NULL;
                New->Rchild=NULL;
                Temp->Lchild=New;
            }
        }
        else
            BiT_Create(Temp->Lchild,x);
    }
    else
    {
        if(Temp->Rchild==NULL)
        {
            if((New=(BiNode*)malloc(sizeof(BiNode)))!=NULL)
            {
                New->elem=x;
                New->Lchild=NULL;
                New->Rchild=NULL;
                Temp->Rchild=New;
            }
        }
        else
            BiT_Create(Temp->Rchild,x);
    }
}
void BiT_Init(BiNode *T,int array[],int size)
{
    int i;
    for(i=0;i<size;i++)
        BiT_Create(T,array[i]);
}

void BiT_Print(BiNode *T)
{
    BiNode *Temp;
    Temp=T;
    if(!Temp)
        return;

    BiT_Print(Temp->Lchild);
    printf("%d;",Temp->elem);
    BiT_Print(Temp->Rchild);

}
int BiT_Search(BiNode *T,int x,int size)
{
    int i=0;
    BiNode *Temp;
    Temp=T;
    if(i<size)
    {
        if(Temp->elem==x)
            return 1;
        else if(Temp->elem>=x&&Temp->Lchild!=NULL)
            BiT_Search(Temp->Lchild,x,size);
        else if(Temp->elem<x&&Temp->Rchild!=NULL)
            BiT_Search(Temp->Rchild,x,size);
        else
            return 0;
    }

}

void BiT_Delete(BiNode *T)
{
    BiNode *Temp;
    BiNode *Trans;
    Temp=T;
    if(Temp->Lchild==NULL)
    {
        T=T->Rchild;
        free(Temp);
    }
    else if(Temp->Rchild==NULL)
    {
        T=T->Lchild;
        free(Temp);
    }
    else
    {   
        Trans=T->Lchild;
        while(Trans->Rchild)
        {
            Temp=Trans;
            Trans=Trans->Rchild;
        }
        T->elem=Trans->elem;
        if(Temp!=T)
            Temp->Rchild=Trans->Rchild;
        else
            Temp->Lchild=Trans->Lchild;
        free(Trans);
    }
}

int BiT_Delenode(BiNode *T,int x)
{
    BiNode *Temp;
    Temp=T;

    if(!Temp)
        return 0;
    else
    {
        if(Temp->elem==x)
        {
            BiT_Delete(Temp);
            return 1;
        }
        else if(Temp->elem>x)
            BiT_Delenode(Temp->Lchild,x);
        else
            BiT_Delenode(Temp->Rchild,x);
    }
}

   

void main()
{
    BiNode *T;
    int *array;
    int size;
    int i;

    printf("Input the size of the ARRAY:");
    scanf("%d",&size);
    array=(int*)malloc(size*sizeof(int));
    for(i=0;i<size;i++)
    {
        printf("Input the elem of No.%d in the ARRAY:",i);
        scanf("%d",&array[i]);
    }
    T=(BiNode*)malloc(sizeof(BiNode));
    T->elem=-1;
    T->Lchild=NULL;
    T->Rchild=NULL;
    BiT_Init(T,array,size);
    BiT_Delenode(T,3);
    BiT_Print(T);
    BiT_Search(T,2,size);
    free(T);
}
为什么在执行int BiT_Delenode(BiNode *T,int x)的时候会报read的溢出错误?求解.......
搜索更多相关主题的帖子: 二叉树 
2011-02-12 14:40
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
收藏
得分:0 
补充一下除了那两段以Del开头的函数其他的都已经测试过可以运行了,估计就是在那里出的问题
2011-02-12 14:46
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
收藏
得分:0 
回复 3楼 cacker
我写的这个是二叉排序树,那个删除的算法是在书上找的伪指令自己补上的,逻辑应该没问题但是就不知道是哪里出问题了....
2011-02-12 20:19
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
收藏
得分:0 
回复 5楼 cacker
恩,就是这个地方执行了delet以后print就不听话了....我纠结了半天也没找到错误....
2011-02-12 21:32
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
收藏
得分:0 
回复 7楼 huangapple
俺也是啊.....红黑树简直就是噩梦啊.....掩面泪奔....
2011-02-12 22:56
yxm870915
Rank: 1
等 级:新手上路
帖 子:18
专家分:2
注 册:2011-2-10
收藏
得分:0 
吼吼,谢谢各位了,我找到错误了~~
2011-02-13 23:51
快速回复:求各位高手帮看一段二叉树程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.040668 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved