Me surgio esa duda con arboles binarios :huh:
Vas buscando las hojas, nodos que no tienen hijos, y los liberas. Y así sucesivamente asta que liberas la raíz.
Y el padre de esa hoja no deberia apuntar a NULL antes de hacer el delete(); de la hoja?
Mejor dicho, primero extraigo la hoja, luego hago que su padre apunte a NULL, y recien hago el delete(extraido);
extraido=hoja;
padre_de_la_hoja->izquierda o derecha(dependiendo en que direccion tenga a su hijo)=NULL;
delete(extraido);
Tener referencias hacia nodos liberados tendrá problemas si decides desrefenciarlas, si no es así, no habrá problema alguno.
Y esto estaria bien? no me convence, creo que estoy confundiendo todo con listas :c
void freememory(tree &bts)
{
if(bts!=NULL){
freememory(bts->left);
freememory(bts->right);
free(bts);
}
}
Si esta bien, la solucion recursiva que muestras si lo es.
saludos!
Mmmm la verdad no me funciona, sera porque cree los nodos con new y deberia usar delete? :huh:
Cita de: Beginner Web en 17 Noviembre 2018, 21:04 PM
Mmmm la verdad no me funciona, sera porque cree los nodos con new y deberia usar delete? :huh:
De hecho.
Si hago esto funciona, pero me gustaria saber si de verdad el arbol quedo liberado del todo, pero ya me dio flojera
void freememory(tree &bts)
{
if(bts!=NULL){
freememory(bts->left);
freememory(bts->right);
delete(bts);
bts=NULL;
}
}
Puedes estar seguro que free va a realizar su trabajo. Siempre y cuando el parámetro sea un apuntador valido.
Saludos
free libera la memoria, delete es mas poderoso, pues si se trata de un puntero a un objeto, invoca al destructor del mismo (y libera la memoria despues).
La combinacion alloc (o malloc) y free, no se intercambia con new y delete, si solicitaste memoria con new, libera con delete, si pediste con alloc (o alguno de sus parientes), liberas con free.
Eso leí por ahi, muchas gracias chicos :D