我正在尝试在二进制搜索树(BST)上实现插入操作。我有一个名为insert
和push
的函数。每当给一个值插入时,insert()
函数是如果root是Null(最初)它将被插入。如果root不是null,则从insert()调用另一个函数push()
来插入值。但是对于我来说,root始终保持为null。我使用了字符串"我在这里"检查,每次我尝试插入一个新的数据,这个字符串被打印。这就是我怎么知道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);
}
}
}
答案 0 :(得分:2)
该程序有两个名为root
的变量。第一个是全局变量,另一个是函数insert的本地变量。这就是为什么全局变量无法在函数insert
中更改。
您可以更改界面
struct node* insert(struct node *root,int value);
并使用该方式的功能:
root = insert(root,value);
存在若干其他方法来更改全局变量,例如使用该界面:
void insert(struct node **root,int value);