关于二叉排序树
- 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了,如果不清楚,自己去看看递归的执行顺序。
[解决办法]
问题很多,建议从基础知识开始复习
最大的问题是,楼主你只申请了一个结点,怎么可能构成树?