Ho eliminato quel'if perché in fondo non mi sembrava fondamentale, almeno per adesso..
Ho compilato ed eseguito questo codice, ma al momento di cancellare mi da un errore:
Errore di segmentazione.
Ho controllato allora meglio il codice, ma non sono riuscito a trovare l'errore.. dove sbaglio?![]()
codice:#include <stdio.h> #include <stdlib.h> // #include <malloc.h> typedef struct nodo{ int dato; struct nodo *ptrsx; struct nodo *ptrdx; }nodo; nodo* creazione(){ nodo *q; q = malloc(sizeof(nodo)); printf("\nInserisci un numero intero:\t"); scanf("%i", &q->dato); printf("\n"); q->ptrsx = NULL; q->ptrdx = NULL; return q; } void ins_ord(nodo *p,nodo *q) { nodo *r; r = p; if(r->dato > q->dato) { if(r->ptrsx == NULL) { r->ptrsx = q; }else { ins_ord(r->ptrsx,q); } } else { if(r->ptrdx == NULL) { r->ptrdx = q; } else { ins_ord(r->ptrdx, q); } } } nodo* ins_bin(nodo *p) { nodo *q; q = creazione(); if(p == NULL) { return q; } else { ins_ord(p, q); } return p; } void visita(nodo *p){ nodo *r; r = p; if(r->ptrsx != NULL) { visita(r->ptrsx); } printf("%i", r->dato); printf("\t"); if(r->ptrdx != NULL) { visita(r->ptrdx); } } nodo* eliminazione(nodo *p, int val) { // if(p->dato == val) // p->dato = p->ptrsx; if(p == NULL) return NULL; else elimina(p->ptrsx); } int elimina(nodo *p) { int num; if(p->ptrsx == NULL) { num = p->dato; free(p); return num; } else if(p->ptrsx != NULL) elimina(p->ptrdx); } int main() { nodo *radice = NULL; int scelta = 1, num; radice = NULL; while(scelta != 0) { printf("1 - Inserimento ordinato;\n2 - Visita albero;\n3 - Cancella elemento;\n0 - Esci;\n\nScelta:\t"); scanf("%i", &scelta); switch(scelta) { case 1: { radice=ins_bin(radice); break; } case 2: { printf("\nAlbero:\n"); visita(radice); printf("\n\n"); break; } case 3: { if(radice != NULL){ printf("\nInserisci il numero da cancellare:\t"); scanf("%d", &num); eliminazione(radice, num); } else { printf("\nLa lista e' vuota.\n"); } break; } } } }

Rispondi quotando