C'è qualche Buon'Anima disposta ad aiutarmi nella creazione della funzione CANCELLAZIONE?
Ne avrei assoluto bisogno a breve, qualche spunto ce l'ho in questo pezzo di codice, però non riesco ad andare avanti anche per il fatto di avere certi "errori" nell'esecione del codice..
La cancellazione la "estraggo" dalla funzione "Ricerca"
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);
}
}
void ricerca(nodo *p,int n) {
if(p != NULL) {
if(p->dato == n) printf("Il valore e' presente.\n\n");
else printf("Il valore non e' presente.\n\n");
}
}
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 ricercare (cancellare):\t");
scanf("%d", &num);
ricerca(radice, num);
} else {
printf("\nLa lista e' vuota.\n");
}
break;
}
}
}
}
Grazie mille..