gpt4 book ai didi

c - 为什么根在二叉树中总是为空

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:45 25 4
gpt4 key购买 nike

我正在尝试对二叉搜索树 (BST) 执行插入操作。我有一个名为 insert 的函数和 push .每当给插入一个值时,insert()调用函数。如果 root 为 Null(最初),它将被插入。如果 root 不为 null,则从 insert() 另一个函数 push()将被调用以插入值。但对我来说,root 始终保持为空。我使用字符串“我在这里”进行检查,每次我尝试插入新数据时都会打印该字符串。这就是我知道 root 保持为 NULL 的方式。这背后的问题是什么?

#include<stdio.h>
struct node {

int data;
struct node* left;
struct node *right;
};
void insert(struct node *root,int value);
void push(struct node *temp,struct node *newNode);
struct node *root;
int main(){
root = NULL;
int option,value;
for(;;){
printf("Please select an option from below : \n");
printf("1 for insert\n");
printf("2 for search\n");
printf("please enter your option : ");
scanf("%d",&option);
printf("\n");
switch(option){
case 1:
printf("you choose to insert\n");
printf("input your value :");
scanf("%d",&value);
insert(root,value);
printf("\n");
break;
default:
break;

}
}
}

void insert(struct node *root,int value){
struct node *newNode = (struct node*)malloc(sizeof(struct node));
struct node *temp = (struct node*)malloc(sizeof(struct node));

newNode->data = value;
newNode->left = NULL;
newNode->right = NULL;
temp = root;
if(root==NULL){
printf("i am here");
root = newNode; // enter first node
}else{

push(temp,newNode);
}
}
void push(struct node *temp,struct node *newNode){
printf("others");
if(temp==NULL){
temp = newNode;
}else{
if(temp->data > newNode->data){
push(temp->left,newNode);
}else{
push(temp->right,newNode);
}
}

}

最佳答案

程序有两个名为root 的变量。第一个是全局变量,另一个是函数插入的局部变量。这就是为什么不能在 insert 函数中更改全局变量的原因。

你可以像这样改变界面

struct node* insert(struct node *root,int value);

并以这种方式使用函数:

root = insert(root,value);

存在其他几种方法来更改全局变量,例如使用该界面:

void insert(struct node **root,int value);

关于c - 为什么根在二叉树中总是为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40331088/

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