【发布时间】:2021-03-11 18:19:34
【问题描述】:
这是我声明的代码,似乎插入函数有问题,我不明白。对于初学者来说,这肯定会令人沮丧。所以,这是我全局声明的结构节点指针,
struct node{
int data;
struct node *left;
struct node *right;
};
这是我全局声明的根节点,
struct node *root=NULL;
这是我声明的插入函数
int insert(struct node* p, struct node *newnode){
if(p==NULL){
p=newnode;
p->left=NULL;
p->right=NULL;
}
else{
if(newnode->data<p->data){
insert(p->left, newnode);
}
else if(newnode->data>p->data){
insert(p->right, newnode);
}
}
return 0;
}
这就是我在 main() 中调用插入函数的方式
struct node *newnode;
while(1){
switch(n){
case 1:
newnode=(struct node*)malloc(sizeof(struct node));
printf("Enter the element: ");
scanf("%d", &newnode->data);
insert(root, newnode);
default:
return 0;
}
}
在这里我没有发现我的代码有任何问题,但我在插入函数中不断收到分段错误(代码转储)。谁能告诉我这段代码有什么错误?
【问题讨论】:
-
您应该为循环中的每个新条目分配一个新节点。
-
@Tarik 但它应该至少不会在第一次迭代中转储
-
如果 p 为 null,则将 newnode 设为 null。
-
你是对的,这只是一个评论。
-
您可以使用 >= 代替 >
标签: c data-structures linked-list binary-search-tree