Questa è la funzione per cancellare un nodo da un albero con una specifica chiave:
codice:AlberoRicerca Delete (TipoElemento X, AlberoRicerca nodo) //applica solo cambiamenti temporanei alle chiavi { AlberoRicerca Temp; if ( nodo == NULL) printf("Elemento da cancellare non trovato.\n\n"); if (X < nodo->Chiave) nodo->Left = Delete (X, nodo->Left); if (X > nodo->Chiave) nodo->Right = Delete (X, nodo->Right); if (nodo->Left && nodo->Right) { Temp = Minimo (nodo->Right); nodo->Chiave = Temp->Chiave; nodo->Right = Delete (nodo->Chiave, nodo->Right); } { Temp = nodo; if (nodo->Left == NULL) nodo = nodo->Right; if ( nodo->Right == NULL) nodo = nodo->Left; free ( Temp ); } return nodo; } TipoElemento Chiave (Posizione nodo) { return nodo->Chiave; //ritorna la chiave della cella a cui punta il puntatore albero }
Ora se nel main richiamo le funzioni nel seguente ordine:
Insert(1,albero);
Delete(1,albero);
Svuota(albero);
non ho problemi ma se prima di cancellare svuoto l'albero mi dà un errore in esecuzione, come ovviare al fatto che dopo la chiamata della funzione Svuota, la Free () (che richiamo al suo interno) fà si che il mio puntatore (albero) vada a NULL e quindi sputi fuori il suddetto errore? Grazie per ogni suggerimento.

Rispondi quotando
Al massimo se ho proprio problemi ti mando un mess. privato, sempre se trovo tempo tra Sistemi Operativi,Metodi numerici per la grafica I,Basi di dati che ultimamente stanno risucchiando tutti il mio tempo.
VVoVe:
