La logica della funzione è quasi giusta; l'errore sta nel fatto che scambi il nodo da inserire con la radice dell'albero, che è il parametro passato alla funzione.
Inoltre nel main devi inzializzare a NULL l'albero:codice:#include <stdio.h> #include <stdlib.h> AlberoRicerca Insert(TipoElemento X, AlberoRicerca radice){ //se l'albero è vuoto costruisco il nodoe lo //ritorno nodo come nuova radice dell'albero if(radice == null){ //alloco il nodo da inserire struct NodoAlbero *nodo = malloc(sizeof(struct NodoAlbero)); if(nodo == NULL){ printf ("Errore di allocazione\n"); return radice; } nodo -> Chiave = X; nodo -> Left = nodo -> Right = NULL; return nodo; } //altrimenti richiamo ricorsivamente la funzione if(X < radice -> Chiave) radice -> Left = Insert(X, radice -> Left); else radice -> Right = Insert (X, radice -> Right); return radice; }
AlberoRicerca albero = NULL;
albero = Insert(10, albero);

Rispondi quotando