Arbres, parcours BFS (extrait 2024 centres etrangers J2, Ex 3)
Partie B
On considère l’arborescence de fichiers de la figure suivante:
arborescence fichiers
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_videqui renvoieTruelorsque le dossier est vide etFalsesinon. - Écrire le code Python permettant d’instancier une variable
var_multimediade 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
parcoursde 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 renvoieTruesi l’arborescence de racineselfcontient au moins un dossier de nomnom_dossieretFalsesinon. - 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.
