Il faut créer les éléments avec des pointeurs nuls au début puis vous établissez les pointeurs ensuite
Vous partez de la racine qui existe de manière statique toujours
Vous avez une variable locale au parcours récursif parentEnCours qui est égale à racine.
Vous lisez la première entrée dans la carte SD. C’est A de type répertoire qui est un fils de parentEnCours.
Vous créez A avec comme parent parentEnCours et de type répertoire. les autres pointeurs sont nullptr et vous mettez à jour enflant de racine pour pointer sur A
Ensuite vous faites un parcours du graphe.
Par exemple en profondeur d’abord.
Comme A est un répertoire vous allez lire son contenu sur la carte SD (récursivelent). A sera le « parent en cours »
Il a un fils toto de type fichier
Vous instanciez donc un nouvel élément de type FICHIER de nom toto dont le parent est parentEnCours et tous les autres pointeurs sont nuls. Comme le pointeur enfant de parentEnCours est nul, Vous modifiez le pointeur enfant de parentEnCours pour pointer sur Toto.
Comme c’est un fichier la recursion en profondeur s’arrête on va voir si parentEnCours en un autre élément enfant sur la carte SD. Il n’y en a pas donc la recursion s’arrête et on remonte d’un niveau
parentEnCours est donc à nouveau racine et on va voir s’il y a un autre enfant. Oui il y’a B de type répertoire que l’on instancie donc avec comme parent parentEnCours (racine) et comme parentEnCours A déjà un enfant on ne modifie pas ce lien. On suit le lien existant pour trouver le premier enfant (A) et on suit le pointeur suivant jusqu’à trouver un élément dont ce pointeur suivant est nul (on est au bout du chaînage). Ici il n’y en a qu’un seul donc on s’arrête à A et on met a jour les pointeurs en disant que B a pour précédent A et que A a pour suivant B.
Ensuite on continue la recursion. B étant de type répertoire il devient parentEnCours et on regarde s’il a des enfants sur la carte SD. Non donc la recursion s’arrête là et on remonte, parentEnCours est à nouveau racine. On demande donc à la racine l’élément suivant après B et on nous donne C. Et ça recommence comme B
Une fois que l’on n’a plus d’enfant inexploré de la racine, le graphe est créé.
Si c’est plus simple avec la bibliothèque SD de faire un parcours en largeur d’abord, ça change un peu l’ordre mais ça reste le même type de récursion.
parentEnCours Est racine et vous avez un autre pointeur enfantPrecedent initialement nul.
On liste le premier élément de parentEnCours c’est A, de type répertoire. on le crée avec comme parent parentEnCours, comme précèdent enfantPrecedent. comme le pointeur enfant de parentEnCours est nul on le fait pointer sur A et comme enfantPrecedent est nul on n’a pas de suivant à mettre à jour. On appelle A maintenant enfantPrecedent.
On demande l’élément suivant de parentEnCours. C’est B de type répertoire. On le crée avec comme parent parentEnCours. Comme parentEnCours à déjà un enfant on ne modifie pas parentEnCours. On définit précédent comme étant enfantPrecedent et comme enfantPrecedent n’est pas nul on met comme suivant l’élément que l’on vient de créer B. B devient maintenant enfantPrecedent.
On demande l’élément suivant de parentEnCours. C’est C de type répertoire. On le crée avec comme parent parentEnCours. Comme parentEnCours à déjà un enfant on ne modifie pas parentEnCours. On définit précédent comme étant (B) et comme enfantPrecedent n’est pas nul on met comme suivant l’élément que l’on vient de créer C. C devient maintenant enfantPrecedent.
On demande l’élément suivant de parentEnCours. Il n’y en a plus.
Donc on va parcourir maintenant tous les enfants de la racine.
On prend A c’est un répertoire donc il devient parentEnCours. enfantPrecedent Est mis à nul.
On parcours à nouveau en largeur tous les enfants de A
On a comme premier élément toto de type fichier. On le crée. On met comme parent parentEnCours et comme précèdent enfantPrecedent. Comme parentEnCours avait son pointeur enfant nul, on le met à jour avec le pointeur sur toto qui devient enfantPrecedent
On demande à parentEnCours (A) son prochain élément, il n’y en a plus. La recursion s’arrête et on remonte d’un cran pour aller demander à B ses enfants. Il n’y en a pas. On passe à C il n’y en a pas. On remonte à la racine et la recursion est terminée.
➜ en gros c’est un parcours récursif soit en profondeur soit le largeur de l’arbre de la carte SD et création de des éléments appropriés. La fonction récursive de parcours gérant l’empilement de variables locales (parentEnCours et enfantPrecedent par exemple).