Arbres, parcours BFS (extrait 2024 centres etrangers J2, Ex 3)
Partie B
On considère l’arborescence de fichiers de la figure suivante:
on propose l’implémentation suivante. L’attribut fils est une variable de type list contenant tous les dossiers fils. Cette liste est vide dans le cas où le dossier est vide.
class Dossier:
def __init__(self, nom, liste):
self.nom = nom
self.fils = liste # liste d'objets de la classe Dossier
- Écrire le code Python d’une méthode
est_vide
qui renvoieTrue
lorsque le dossier est vide etFalse
sinon. - Écrire le code Python permettant d’instancier une variable
var_multimedia
de la classe Dossier représentant le dossier multimedia de la figure précédente. Attention : cela nécessite d’instancier tous les nœuds du sous-arbre de racine multimedia. - Recopier et compléter sur votre copie le code Python de la méthode parcours suivante qui affiche les noms de tous les descendants d’un dossier en utilisant l’ordre préfixe.
def parcours(self):
print(...)
for f in ...:
...
- Justifier que cette méthode parcours termine toujours sur une arborescence de fichiers.
- Proposer une modification de la méthode parcours pour que celle-ci effectue plutôt un parcours suffixe (ou postfixe).
- Expliquer la différence de comportement entre un appel à la méthode
parcours
de la classe Dossier et une exécution de la commande UNIXls
On considère la variable var_videos
de type Dossier représentant le dossier
videos de la figure précédente. On souhaite que le code Python
var_videos.mkdir("documentaires")
crée un dossier documentaires vide
dans le dossier var_videos
.
- Écrire le code Python de la méthode
mkdir
. - Écrire en Python une méthode
contient(self, nom_dossier)
qui renvoieTrue
si l’arborescence de racineself
contient au moins un dossier de nomnom_dossier
etFalse
sinon. - Avec l’implémentation de la classe Dossier de cette partie, expliquer comment il serait possible de déterminer le dossier parent d’un dossier donné dans une arborescence donnée. On attend ici l’idée principale de l’algorithme décrite en français. On ne demande pas d’implémenter cet algorithme en Python.
- Proposer une modification dans la méthode
__init__
de la classe Dossier qui permettrait de répondre à la question précédente beaucoup plus efficacement et expliquer votre choix.