ti ho commentato una semplice bozza
codice:
#include <stdio.h>
#include <stdlib.h>
struct nodo {
int distanza;
struct nodo *psx;
struct nodo *pdx;
};
struct nodo * aggiungiNodo ( struct nodo * genitore, int la_distanza ) {
int dist; // di appoggio
struct nodo * n; // di appoggio
struct nodo * nuovo_nodo = ( struct nodo * ) malloc ( sizeof ( struct nodo ) );
nuovo_nodo->psx = NULL;
nuovo_nodo->pdx = NULL;
nuovo_nodo->distanza = la_distanza ;
if ( !genitore ) {
// creo il nodo radice
return nuovo_nodo ;
}
else {
n = genitore ;
/*
visita l'albero a partire da genitore
finchè non trova una posizione libera
*/
while ( n ) {
genitore = n ;
dist = genitore->distanza;
if ( la_distanza < dist ) // prendi il ramo sinistro
n = genitore->psx ;
else if ( la_distanza < dist ) // prendi il ramo destro
n = genitore->pdx ;
else // sono uguali, come la vuoi gestire ??
;
}
if ( la_distanza < dist )
return genitore->psx = nuovo_nodo ;
else if ( la_distanza < dist )
return genitore->pdx = nuovo_nodo ;
else // sono uguali, come la vuoi gestire ??
;
}
}
int main ()
{
// creo il nodo radice
struct nodo * radice = aggiungiNodo ( NULL, 7 );
printf ( "%d\n", radice->distanza );
// aggiungo un nodo
struct nodo * figlio = aggiungiNodo ( radice, 4 ) ;
printf ( "%d\n", radice->psx->distanza );
return (0);
}