不要忘了*后面的&
void insert(Node*&root,int p){
// Node*&root 的&不能忘,要不然没法修改真正的指针指向,只修改了镜像的。
if(root==NULL){
root=new Node();
root->num=p;
return;
}
else if(root!=NULL)
{
if(p<root->num){
insert(root->left,p);
}
else{
insert(root->right,p);
}
}
}
错误的代码:
- 原因:p->left返回的不是p->left的地址,是NULL,对NULL的修改不是对root的修改
void add(Node*root,int num){
Node *p=root;
while(p!=NULL){
if(p->num>num){
p=p->left;
}
else{
p=p->right;
}
}
p=new Node();
p->num=num;
}
正确的代码:
void add(Node*&root,int num){
if(root==NULL){
root=new Node();
root->num=num;
return;
}
if(root->num>num){
add(root->left,num);
}
else{
add(root->right,num);
}
}