Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Beginner Web en 17 Noviembre 2018, 06:31 AM

Título: como se libera la memoria de un arbol?
Publicado por: Beginner Web en 17 Noviembre 2018, 06:31 AM
Me surgio esa duda con arboles binarios  :huh:
Título: Re: como se libera la memoria de un arbol?
Publicado por: MAFUS en 17 Noviembre 2018, 11:25 AM
Vas buscando las hojas, nodos que no tienen hijos, y los liberas. Y así sucesivamente asta que liberas la raíz.
Título: Re: como se libera la memoria de un arbol?
Publicado por: Beginner Web en 17 Noviembre 2018, 16:00 PM
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);

Código (cpp) [Seleccionar]
extraido=hoja;
padre_de_la_hoja->izquierda o derecha(dependiendo en que direccion tenga a su hijo)=NULL;
delete(extraido);
Título: Re: como se libera la memoria de un arbol?
Publicado por: CalgaryCorpus en 17 Noviembre 2018, 16:09 PM
Tener referencias hacia nodos liberados tendrá problemas si decides desrefenciarlas, si no es así, no habrá problema alguno.
Título: Re: como se libera la memoria de un arbol?
Publicado por: Beginner Web en 17 Noviembre 2018, 19:31 PM
Y esto estaria bien? no me convence, creo que estoy confundiendo todo con listas :c
Código (cpp) [Seleccionar]
void freememory(tree &bts)
{
if(bts!=NULL){
    freememory(bts->left);
    freememory(bts->right);
    free(bts);
  }
}
Título: Re: como se libera la memoria de un arbol?
Publicado por: AlbertoBSD en 17 Noviembre 2018, 19:42 PM
Si esta bien, la solucion recursiva que muestras si lo es.

saludos!
Título: Re: como se libera la memoria de un arbol?
Publicado por: 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:
Título: Re: como se libera la memoria de un arbol?
Publicado por: AlbertoBSD en 17 Noviembre 2018, 22:29 PM
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.
Título: Re: como se libera la memoria de un arbol?
Publicado por: Beginner Web en 17 Noviembre 2018, 22:55 PM
Si hago esto funciona, pero me gustaria saber si de verdad el arbol quedo liberado del todo, pero ya me dio flojera
Código (cpp) [Seleccionar]
void freememory(tree &bts)
{
if(bts!=NULL){
   freememory(bts->left);
   freememory(bts->right);
   delete(bts);
   bts=NULL;
  }
}
Título: Re: como se libera la memoria de un arbol?
Publicado por: AlbertoBSD en 17 Noviembre 2018, 23:19 PM
Puedes estar seguro que free va a realizar su trabajo. Siempre y cuando el parámetro sea un apuntador valido.

Saludos

Título: Re: como se libera la memoria de un arbol?
Publicado por: CalgaryCorpus en 17 Noviembre 2018, 23:40 PM
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.
Título: Re: como se libera la memoria de un arbol?
Publicado por: Beginner Web en 18 Noviembre 2018, 00:23 AM
Eso leí por ahi, muchas gracias chicos  :D