Código C:
Ver original
typedef int tipoElem; typedef struct nodo{ tipoElem info; struct nodo *izq; struct nodo *der; }tNodo; typedef struct{ tNodo *raiz; int nElems; }tABB; // elimina un elemento “item” de un ABB tNodo suce_pred(tNodo *nodo){ if (nodo->der == NULL) return *nodo; else suce_pred(nodo->der); } void hijo_unico(tNodo *nodo){ if (nodo->izq == NULL){ nodo->info = nodo->der->info; nodo->izq = nodo->der->izq; nodo->der = nodo->der->der; } else{ nodo->info = nodo->izq->info; nodo->izq = nodo->izq->izq; nodo->der = nodo->izq->der; } } void dos_hijos(tNodo *nodo){ tNodo *aux; *aux = suce_pred(nodo->izq); nodo->info = aux->info; hijo_unico(aux); } void removeHelp(tNodo *nodo, tipoElem item){ if (item == nodo->info){ if (nodo->izq == NULL && nodo->der == NULL){ nodo = NULL; } else if (nodo->izq != NULL && nodo->der != NULL) dos_hijos(nodo); else hijo_unico(nodo); } else if (item < nodo->info) removeHelp(nodo->izq, item); else removeHelp(nodo->der, item); } void remove_n (tABB *T, tipoElem item){ removeHelp(T->raiz, item); } int main(){ tABB A; int c[7]={10,15,12,17,5,7,2}; int b; initTree(&A); for (b=0; b<7; b++){ inserta(&A, c[b]); } inOrden(&A); remove_n(&A, 7); inOrden(&A); }
El problema es que no la borra despues de aplicar "remove_n". Pero si dentro de la funcion helpRemove, intento imprimir el valor del nodo que asigne a NULL, se me cae el programa (por razones obvias).
Por lo que supongo, que la funcion me esta eliminando el puntero y lo trata como variable local, por eso efectivamente lo asigne como NULL y se cae al imprimir su valor, pero no lo elimine del arbol "original".
¿En que parte esta el error?
Gracias de antemano
Saludos.