Foro de elhacker.net

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
  1. extraido=hoja;
  2. padre_de_la_hoja->izquierda o derecha(dependiendo en que direccion tenga a su hijo)=NULL;
  3. 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
  1. void freememory(tree &bts)
  2. {
  3. if(bts!=NULL){
  4.    freememory(bts->left);
  5.    freememory(bts->right);
  6.    free(bts);
  7.   }
  8. }


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
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
  1. void freememory(tree &bts)
  2. {
  3. if(bts!=NULL){
  4.    freememory(bts->left);
  5.    freememory(bts->right);
  6.    delete(bts);
  7.    bts=NULL;
  8.   }
  9. }


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