Entonces, antes de leer algunos conceptos básicos de informática.
- Un árbol binario es una estructura asignada dinámicamente (generalmente utilizada para el almacenamiento ordenado).
- Debido a su naturaleza, el recorrido de los árboles binarios suele ser recursivo;
Esto se debe a que el recorrido lineal (a través de un bucle) no es natural cuando hay dos vías de bucle.- Recursivo: Esto significa una función que se llama a sí misma.
- En lenguajes pasados de moda, la administración de memoria requiere administración manual de memoria.
- Manual: significa que tienes que hacerlo tú mismo.
- Cuando realiza la gestión manual de la memoria, debe solicitar al sistema subyacente que libere a cada miembro del árbol.
- Gratis: recupere la memoria en los poos globales para que pueda reutilizarse y no se quede sin memoria.
- Liberación: esto se hace llamando a la función
free()
y pasándole el puntero que desea recuperar. - Puntero: es como un palo virtual. Al final es la memoria. Cuando solicita memoria, se le proporciona un puntero (dispositivo virtual) que tiene memoria. Cuando haya terminado, devuelve el puntero (dispositivo virtual).
La solución recursiva:
freeTree(Node* node)
{
freeTree(node->left);
freeTree(node->right);
free(node);
}
El problema es que la recursión significa que repetidamente estás llamando a la misma función. Esto crece la pila. El crecimiento de la pila usa más memoria. La razón por la que está liberando el árbol es porque desea recuperar la memoria usando más memoria, es contraproducente (incluso si recupera ambos bits de memoria).
Por fin la pregunta:
Entonces, el problema se centra en convertir la versión recursiva anterior en una solución lineal (para que no tenga que usar memoria).
Dar el tipo de nodo
typedef struct Node Node;
struct Node
{
Node* left;
Node* right;
};
Escriba una función para liberar un árbol de estos nodos.
Restricciones:
- No se puede usar la recursividad (ni siquiera indirectamente)
No se puede asignar ningún espacio dinámico para el seguimiento.
Tenga en cuenta que hay una solución O (n)
Ganador:
- La mejor complejidad.
- Tie Break 1: primer envío
- Tie Break 2: menor cantidad de personajes.