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)