请帮我看看这个二叉排序树建立有什么问题?

来源:百度知道 编辑:UC知道 时间:2024/05/16 17:04:44
建立二叉排序树不成功,只能输出一个节点5.哪里有问题?谢谢

#include<stdio.h>
#include<malloc.h>
typedef struct _node{
int data;
struct _node *lchild,*rchild;
}BTnode; /*定义节点*/
void Insert(BTnode *r,BTnode *p) /*插入每个节点*/
{
if(r==NULL)r=p;
else
{
if(p->data<r->data)
Insert(r->lchild,p);
else
Insert(r->rchild,p);
}
}
void list(BTnode *r) /*遍历*/
{
if(r!=NULL)
{
list(r->lchild);
printf(" %d",r->data);
list(r->rchild);
}
}
int main()
{
int a[6]={5,8,3,1,9,2};
BTnode *p,*r;
int i;
for(i=0;i<6;i++)
{
p=(BTnode *)malloc(sizeof(BTnode));
p->data=a[i];
p->lchild=NULL;p->rchild=NULL;
if(i==

void Insert(BTnode *r,BTnode *p) /*插入每个节点*/
{
if(r==NULL)r=p;
else
{
if(p->data<r->data)
Insert(r->lchild,p);
else
Insert(r->rchild,p);
}
}
指针做函数参数的时候不会改变指针指向的地址,所以你调用Insert(r->lchild,p);地方是不会起作用的。修改方法有二:双指针,或引用;、
下面用引用:
void Insert(BTnode *&r,BTnode *&p) /*插入每个节点*/
{
....
}