gpt4 book ai didi

c - 在 BST insert( ) 中使用 **

转载 作者:行者123 更新时间:2023-11-30 15:02:22 25 4
gpt4 key购买 nike

以下是我的 BST 插入函数代码。有人可以解释一下为什么会出现段错误吗?

#include <stdio.h>
#include <stdlib.h>

struct node{
int value;
struct node* right;
struct node* left;
};

struct node* insert(struct node* n,int age){
if (n==NULL){
n = malloc(sizeof(struct node));
n->value = age;
n->left = n->right = NULL;
}
else if(age < n->value){
n->left = insert(n->left, age);
}
else {
n->right = insert(n->right, age);
}
return n;
}

void main(){
int age;
struct node* n=NULL;
scanf("%d",&age);
while (age!=-1){
n=insert(n,age);
scanf("%d",&age);
}
}

我提到了this它建议使用 **(引用指针)。

f( &px );
//...

void f( int **px )
{
*px = malloc( sizeof( int ) );

printf( "*px = %p\n", *px );
}

但是为什么我们不能通过将返回类型从 void 更改为 node* 来避免使用 **?

最佳答案

这似乎对我有用。我没有对您的代码进行太多更改,除了您如何使用 scanf() ,当您输入 1 时,它不会结束。

最好只调用 scanf 一次,并确保允许连续输入,使用 while (scanf(.....) == 1,确保在终止之前始终读取一个值,在本例中,直到 age1

除非我遗漏了什么,否则这是建议的代码:

#include <stdio.h>
#include <stdlib.h>

struct node{
int value;
struct node* right;
struct node* left;
};

struct node* insert(struct node* n,int age){
if (n==NULL){
n = malloc(sizeof(struct node));
n->value = age;
n->left = n->right = NULL;
}
else if(age < n->value){
n->left = insert(n->left, age);
}
else {
n->right = insert(n->right, age);
}
return n;
}

void
print_tree(struct node *n) {
if (n != NULL) {
print_tree(n->left);
printf("%d\n", n->value);
print_tree(n->right);
}
}

int main(){
int age;
struct node* n = NULL;

printf("Enter some numbers(1 to stop): ");
while (scanf("%d", &age) == 1 && age != 1) {
n = insert(n, age);
}

printf("\nYour numbers inserted into BST:\n");
print_tree(n);

return 0;
}

关于c - 在 BST insert( ) 中使用 **,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41084190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com