PDA

Visualizza la versione completa : Alberi binari in C


Simona82
17-11-2008, 11:11
Salve a tutti.
Devo creare un albero binario che venga costruito a partire dai sottoalberi fino a giungere al nodo principale....qualcuno può aiutarmi?

mondobimbi
17-11-2008, 11:15
prova a buttare giù qualcosina, inizia a definire la struttura dei dati di un nodo dell'albero binario.
Dai anche una occhiata in rete che c'è un mucchio di materiale sull'argomento.
ciao
sergio

Simona82
17-11-2008, 11:35
la struttura è semplice...

struct nodo{
int distanza;
struct nodo *psx;
struct nodo *pdx;
}

mondobimbi
17-11-2008, 12:07
ti ho commentato una semplice bozza


#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);

}

Simona82
17-11-2008, 12:17
ok. grazie. Ci lavoro un po' sopra. :)

Loading