Я пытаюсь создать функцию для добавления узла в BST.
Код для функции вставки приведен ниже.
void insert(struct node **root,int data){
if(!(*root)){
struct node *temp=(struct node*)malloc(sizeof(struct node));
temp->data=data; //how to do without temp node
temp->left=temp->right=NULL;
*root=temp;
return;
}
if(data<(*root)->data){
insert(&(*root)->left,data);
}
else if(data>(*root)->data){
insert(&(*root)->right,data);
}
}
как вставить значение для первого условия if без использования временного узла. Я довольно плохо знаком с указателями. Я могу получить правильный ответ, но хочу избежать использования временного узла
EDIT:
это согласно предложению @ 1201ProgramAlarm
В соответствии с этим я не получаю вывод на печать
struct node{
int data;
struct node *left,*right;
};
//
void print_inorder(struct node * tree)
{
if (tree)
{
print_inorder(tree->left);
printf("%d\n",tree->data);
print_inorder(tree->right);
}
}
void insert(struct node **root,int data){
if(!(*root)){
struct node *temp=(struct node*)malloc(sizeof(struct node));
(*root)->data=data;
(*root)->left=(*root)->right=NULL;
return;
}
if(data<(*root)->data){
insert(&(*root)->left,data);
}
else if(data>(*root)->data){
insert(&(*root)->right,data);
}
}
void main(){
struct node *root=(struct node*)malloc(sizeof(struct node));
root=NULL;
insert(&root,9);
insert(&root,4);
insert(&root,15);
insert(&root,6);
insert(&root,12);
insert(&root,17);
insert(&root,2);
print_inorder(root);
}
РЕДАКТИРОВАТЬ 2: удалил временную инициализацию в функции и инициализировал корень как нулевой в main.
void insert(struct node **root,int data){
if(!(*root)){
(*root)->data=data;
(*root)->left=(*root)->right=NULL;
return;
}
if(data<(*root)->data){
insert(&(*root)->left,data);
}
else if(data>(*root)->data){
insert(&(*root)->right,data);
}
}
void main(){
struct node *root=NULL;
insert(&root,9);
insert(&root,4);
insert(&root,15);
insert(&root,6);
insert(&root,12);
insert(&root,17);
insert(&root,2);
printf("Inorder Traversal\n");
print_inorder(root);
}
До сих пор не работает. Любая помощь приветствуется, поскольку я довольно новичок в указателях.