24-NSIJ2G11-2
-
La commande
ls documentsaffiche le contenu du répertoiredocumentsdepuis le répertoire couranthome. -
La commande déplace le répertoire
multimedia(avec tout son contenu) dans le répertoiredocuments. Dans l'arborescence, cela revient à détacher le sous-arbre de racinemultimedia, pour le rattacher ensuite sous le nœudcours. -
La classe
Arbremodèlise ici un arbre binaire, or un répertoire peut contenir plus de deux répertoires, commedocumentsqui en contient trois. -
Le parcours réalisé ici est un parcours préfixe, la racine est traitée avant les sous-arbres.
-
Un parcours un largeur pourrait parcourir dans l'ordre :
homedocumentsmultimediacoursadministratifpersonnelimagesvideofilms. -
Quelques alternatives :
-
Lors des différents appels récursifs, lorqu'on atteint une feuille de l'arbre, un dossier vide, sa liste
filsest aussi vide, donc cela termine la récursion. -
La commande
lsn'est par défaut récursive et liste aussi les fichiers présents. -
Puisqu'un dossier de classe
Dossiern'a pas un accès direct à son dossier parent, on doit explorer toute l'arborescence depuis la racine pour le retrouver, avec un parcours en profondeur par exemple. Dès qu'on découvre le dossier fils dans la descendance d'un dossier, on renvoie alors le nom de ce dernier. La méthode précédente peut donc être adaptée :def parent(self, nom_dossier): for f in self.fils: if f.nom == nom_dossier or f.contient(nom_dossier): return self.nom return NoneEn conclusion, cet algorithme visite une seule fois chacun des \(n\) dossiers ainsi que chacun des \(m\) liens (ou arcs) de l'arborescence. Son coût est donc en \(O(n + m)\) dans le pire des cas.
-
Il suffirait de stocker une référence vers le dossier parent pour y accéder en temps constant \(O(1)\) :