Donc, avant de lire quelques concepts informatiques de base.
- Un arbre binaire est une structure allouée dynamiquement (généralement utilisée pour le stockage ordonné).
- En raison de sa nature, la traversée d'arbres binaires est généralement récursive;
En effet, la traversée linéaire (via une boucle) n'est pas naturelle lorsqu'il existe deux voies de bouclage.- Récursif: cela signifie une fonction qui s'appelle elle-même.
- Dans les langues anciennes, la gestion de la mémoire nécessite une gestion manuelle de la mémoire.
- Manuel: signifie que vous devez le faire vous-même.
- Lorsque vous effectuez une gestion manuelle de la mémoire, vous devez demander au système sous-jacent de libérer chaque membre de l'arborescence.
- Gratuit: récupérez la mémoire dans le caca mondial afin qu'elle puisse être réutilisée et que vous ne manquiez pas de mémoire.
- Libération: cela se fait en appelant la fonction
free()
et en lui passant le pointeur que vous souhaitez récupérer. - Pointeur: C'est comme un bâton virtuel. À la fin, c'est la mémoire. Lorsque vous demandez de la mémoire, vous recevez un pointeur (bâton virtuel) qui a de la mémoire. Lorsque vous avez terminé, vous rendez le pointeur (bâton virtuel).
La solution récursive:
freeTree(Node* node)
{
freeTree(node->left);
freeTree(node->right);
free(node);
}
Le problème est alors que la récursivité signifie que vous appelez à plusieurs reprises la même fonction. Cela augmente la pile. Agrandir la pile utilise plus de mémoire. La raison pour laquelle vous libérez l'arborescence est que vous souhaitez récupérer de la mémoire en utilisant plus de mémoire est contre-productif (même si vous récupérez les deux bits de mémoire).
Enfin la question:
Le problème se concentre donc sur la conversion de la version récursive ci-dessus en une solution linéaire (de sorte que vous n'ayez pas à utiliser de mémoire).
Donnez le type de nœud
typedef struct Node Node;
struct Node
{
Node* left;
Node* right;
};
Écrivez une fonction pour libérer un arbre de ces nœuds.
Restrictions:
- Ne peut pas utiliser la récursivité (pas même indirectement)
Impossible d'allouer d'espace dynamique pour le suivi.
Notez qu'il existe une solution O (n)
Gagnant:
- Meilleure complexité.
- Tie Break 1: première soumission
- Tie Break 2: moins de personnages.