gpt4 book ai didi

c - 二叉搜索树中插入失败

转载 作者:行者123 更新时间:2023-11-30 14:47:50 25 4
gpt4 key购买 nike

这是我用于创建和插入二叉搜索树的代码

struct BTNode
{
int info;
struct BTNode *left, *right;
};

struct BTNode* create(int data)
{
struct BTNode *root;
struct BTNode *n = malloc(sizeof(struct BTNode));

n->info = data;
n->left = NULL;
n->right = NULL;
root = n;

return(root);
}

struct BTNode* insert(struct BTNode *root, int data)
{
struct BTNode *ptr;
struct BTNode *n = malloc(sizeof(struct BTNode));
if (n == NULL)
printf("\nOUT OF MEMORY!\n");

n->info = data;
n->left = NULL;
n->right = NULL;


ptr = root;
while (ptr != NULL){
if (data < ptr->info){
if (ptr->left == NULL)
ptr->left = n;

ptr = ptr->left;
}
else if (data > ptr->info){
if (ptr->right == NULL)
ptr->right = n;

ptr = ptr->right;
}
}

return(n);
}

这是 main() 函数

int main()
{
struct BTNode *root = NULL;
int choice, data;

printf("\nWrite the root data: ");
scanf("%d", &data);
root = create(data);

while (1){
printf("\n1.Insert 2.Preorder 3.Exit\n");
scanf("%d", &choice);
switch(choice){
case 1:
printf("\nWrite the data: ");
scanf("%d", &data);
insert(root, data);
break;

我能够创建根节点,但每当我尝试插入数据时,我都会给出我的数据,编译器会停止执行任何操作。知道为什么会发生这种情况吗?

最佳答案

您的 while() 循环会永远持续下去,因为即使在找到插入节点的位置后,您仍会继续循环:

while(ptr!=NULL){
if(data<ptr->info){
if(ptr->left==NULL)
ptr->left=n;

ptr=ptr->left;
}
else if(data>ptr->info){
if(ptr->right==NULL)
ptr->right=n;

ptr=ptr->right;
}
}

插入节点后需要跳出 while() 循环:

while (ptr != NULL) {
if (data < ptr->info) {
if (ptr->left == NULL) {
ptr->left = n;
break;
}


ptr = ptr->left;
} else if (data > ptr->info) {
if (ptr->right == NULL) {
ptr->right = n;
break;
}


ptr = ptr->right;
}
}

此外,检查 malloc() 是否失败还有奖励分

struct BTNode *n = malloc(sizeof(struct BTNode));
if (n == NULL)
printf("\nOUT OF MEMORY!\n");

但是无论如何继续下去都有负面影响,如果 malloc() 失败,您应该退出该函数

struct BTNode *n = malloc(sizeof(struct BTNode));
if (n == NULL) {
printf("\nOUT OF MEMORY!\n");
return NULL:
}

当然,调用 insert() 的代码应该知道如果 insert() 返回 NULL 该怎么办。

关于c - 二叉搜索树中插入失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937068/

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