Insertion de l’arbre de recherche binary – racine toujours nulle

J’ai ds code pour l’insertion de valeurs dans un arbre de recherche binary en utilisant la récursivité. Le problème est que la racine rest toujours nulle. Lors de l’exécution, la 1ère printf () imprime 10, mais la 2e printf (après insertRec (10)) n’imprime rien car la racine est null.

#include #include struct llist { int data; struct llist *left; struct llist *right; }; typedef struct llist node; void insertRec(node *r, int num) { if(r==NULL) { r=(node*)malloc(sizeof(node)); r->data=num; r->left=NULL; r->right=NULL; printf("%d ",r->data); //1st printf } else { if(num data) insertRec(r->left, num); else insertRec(r->right, num); } } void display(node *x) { if(x != NULL) { display(x->left); printf("%d-->",x->data); display(x->right); } else return; } int main() { node *root=NULL; insertRec(root,10); if(root !=NULL) printf("\ndata=%d",root->data); //2nd printf insertRec(root,5); insertRec(root,15); insertRec(root,3); insertRec(root,18); display(root); getch(); } 

Vous transmettez root tant que valeur afin que les modifications apscopes à cette dernière dans la fonction d’insertion ne soient pas répercutées sur la fonction principale; par conséquent, la root rest NULL dans la fonction principale. Pour rectifier votre code, vous devez passer d’un pointeur à l’autre . Passer l’adresse de la root pour refléter le changement de la fonction principale.

 void insertRec(node *r, int num) 

devrait être codé comme:

 void insertRec(node **r, int num) { if(*r==NULL) { *r= malloc(sizeof(node)); (*r)->data=num; // 

et utilisez *root inside insert function.

Et appelez-le en tant que insertRec(&root, 10); de main.

De plus, si vous allouez de la mémoire de manière dynamic, vous devez libérer la mémoire allouée en utilisant explicitement free.

Une dernière chose à apprendre les programmes C en retrait .