Я пытаюсь реализовать операцию вставки в двоичном дереве поиска (BST). У меня есть функция с именем insert
и push
. При каждом значении для вставки вызывается функция insert()
.If root это Null (изначально) он будет вставлен. Если root не является нулевым, то из insert() будет вызвана другая функция push()
. Но для меня root всегда остается null. Я использовал строку «Я здесь», чтобы проверить и каждый раз, когда я пытаюсь вставить новые данные, эта строка печатается. Вот как я знаю, что 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);
}
}
}
'root = newNode;' и 'temp = newNode;' не изменяют свои значения в вызывающей функции. –