Saltar al contenido

liberando memoria de un árbol binario C

La guía o código que verás en este artículo es la solución más rápida y válida que hallamos a tus dudas o dilema.

Solución:

Dado que es un árbol, debe optar por un enfoque recursivo.

deallocate (node):
    //do nothing if passed a non-existent node
    if node is null
        return

    //now onto the recursion
    deallocate(left node)
    deallocate(right node)

    free node

Piense en lo que hacen los diferentes tipos transversales y tenga en cuenta que, después de liberar memoria, ya no podrá acceder a ella:

  • Preorden: operación realizada antes de visitar a cualquier niño
  • En orden: operación realizada después de visitar el subárbol izquierdo, antes del subárbol derecho
  • Posorden: operación realizada después de visitar todos los subárboles

Dadas las afirmaciones anteriores, la respuesta debe ser clara.

void free_tree(Node * node)
   //post-order like FatalError hinted at
       if (node != NULL) 
        free_tree(node->right);
        free(node->data); //if data was heap allocated, need to free it
        free_tree(node->left);
        free(node);
     

Una buena manera de verificar las fallas de segmentación y las fugas de memoria es usar

valgrind --leak-check=full ./yourProgram

valoraciones y comentarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *