读书人

关于二叉排序树解决方案

发布时间: 2012-11-03 10:57:44 作者: rapoo

关于二叉排序树

C/C++ code
/***二叉排序树****/#include<iostream>using namespace std;typedef struct NODE{    int data;    NODE *lift;    NODE *right;}noed,*pnoed;pnoed updata(pnoed head,pnoed data) //添加节点,返回根节点指针{    if(head==0)//空树,data作为头结点    {        head=data;        head->lift=NULL;        head->right=NULL;        return data;    }    else    {        pnoed ptemp=head;        if(ptemp->lift==NULL&&ptemp->data>=data->data)//小于根节点,根节点无左子树,插入左子树        {            ptemp->lift=data;            data->lift=NULL;            data->right=NULL;            return head;        }        else if(ptemp->right==NULL&&ptemp->data<data->data)//大于根节点,根节点无右子树,插入右子树        {            ptemp->right=data;            data->lift=NULL;            data->right=NULL;            return head;        }        else if(ptemp->data>=data->data)//递归查找插入位置            updata(ptemp->lift,data);        else            updata(ptemp->right,data);    }}int main(){    int nums=10000;    int s,n=0;    pnoed head=NULL;    pnoed p=new noed;/*word是一个每行一个数字的文本*/    fstream in("d://word.txt",ios::in);    cout<<"请稍候:"<<endl;    n=0;    while(in>>s)    {        n++;        if(n>=10000&&n%10000==0)cout<<"已载入:"<<n<<"个."<<endl;        p->data=s;        head=updata(head,p);//发现问题的地方.    }    in.close();    cout<<"载入完成"<<endl;    system("pause");    delete p;    return 0;}


问题来了.每次执行到上面所说的"head=updata(head,p);//发现问题的地方."这地方.head的值莫名其妙的就变为NULL了.
但是进入updata函数后又恢复正常地址.
代码实际运行结果是每次插入一个新数据,就会覆盖原数据.查了好几个小时了.找不到原因.
哪位老师给看一下啊?

[解决办法]
head=updata(head,p);//发现问题的地方

你根本没必要每次都改变这个Head,因为你用的递归,递归的返回值是从起点倒退回去,所以后面可能把head的值置为NULL了,如果不清楚,自己去看看递归的执行顺序。
[解决办法]
问题很多,建议从基础知识开始复习

最大的问题是,楼主你只申请了一个结点,怎么可能构成树?

读书人网 >C++

热点推荐