como se libera la memoria de un arbol?

Iniciado por Beginner Web, 17 Noviembre 2018, 06:31 AM

0 Miembros y 1 Visitante están viendo este tema.

Beginner Web

Me surgio esa duda con arboles binarios  :huh:
7w7

MAFUS

Vas buscando las hojas, nodos que no tienen hijos, y los liberas. Y así sucesivamente asta que liberas la raíz.

Beginner Web

#2
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);
7w7

CalgaryCorpus

Tener referencias hacia nodos liberados tendrá problemas si decides desrefenciarlas, si no es así, no habrá problema alguno.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

Beginner Web

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);
  }
}
7w7

AlbertoBSD

Si esta bien, la solucion recursiva que muestras si lo es.

saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Beginner Web

Mmmm la verdad no me funciona, sera porque cree los nodos con new y deberia usar delete?  :huh:
7w7

AlbertoBSD

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.
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Beginner Web

#8
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;
  }
}
7w7

AlbertoBSD

Puedes estar seguro que free va a realizar su trabajo. Siempre y cuando el parámetro sea un apuntador valido.

Saludos

Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW