2 changed files with 111 additions and 113 deletions
@ -1,113 +0,0 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
""" |
|||
Created on Sat Jan 23 19:23:01 2021 |
|||
|
|||
@author: manu |
|||
""" |
|||
|
|||
from File import File_chaine as File |
|||
from Pile import Pile_chaine as Pile |
|||
|
|||
|
|||
class Arbre: |
|||
"""Un arbre binaire.""" |
|||
def __init__(self, val): |
|||
self.valeur = val |
|||
self.gauche = None |
|||
self.droit = None |
|||
|
|||
def insere_gauche(self, val): |
|||
"""Insère la valeur val à la racine du fils gauche de l'arbre. |
|||
L'ancien fils gauche devient le fils gauche du nouveau nœud. |
|||
Renvoie le sous arbre créé.""" |
|||
nouvel_arbre = Arbre(val) |
|||
nouvel_arbre.gauche = self.gauche |
|||
self.gauche = nouvel_arbre |
|||
return nouvel_arbre |
|||
|
|||
def insere_droit(self, val): |
|||
"""Insère la valeur val à la racine du fils droit de l'arbre. |
|||
L'ancien fils droit devient le fils gauche du nouveau nœud. |
|||
Renvoie le sous arbre créé.""" |
|||
nouvel_arbre = Arbre(val) |
|||
nouvel_arbre.gauche = self.droit |
|||
self.droit = nouvel_arbre |
|||
return nouvel_arbre |
|||
|
|||
|
|||
def taille(a): |
|||
"""Renvoie la taille de l'arbre a.""" |
|||
if a is None: |
|||
return 0 |
|||
return 1 + taille(a.gauche) + taille(a.droit) |
|||
|
|||
|
|||
def hauteur(a): |
|||
"""Renvoie la hauteur de l'arbre a.""" |
|||
if a is None: |
|||
return 0 |
|||
return 1 + max(hauteur(a.gauche), hauteur(a.droit)) |
|||
|
|||
|
|||
def parcours_bfs(a): |
|||
"""Affiche tous les nœuds de l'arbre non vide a par un parcours BFS.""" |
|||
a_traiter = File() |
|||
a_traiter.enfiler(a) |
|||
while not a_traiter.est_vide(): |
|||
noeud = a_traiter.defiler() |
|||
print(noeud.valeur) |
|||
if noeud.gauche is not None: |
|||
a_traiter.enfiler(noeud.gauche) |
|||
if noeud.droit is not None: |
|||
a_traiter.enfiler(noeud.droit) |
|||
|
|||
|
|||
def parcours_dfs_iter(a): |
|||
"""Affiche tous les nœuds de l'arbre non vide a par un parcours DFS.""" |
|||
a_traiter = Pile() |
|||
a_traiter.empiler(a) |
|||
while not a_traiter.est_vide(): |
|||
noeud = a_traiter.depiler() |
|||
print(noeud.valeur) |
|||
if noeud.droit is not None: |
|||
a_traiter.empiler(noeud.droit) |
|||
if noeud.gauche is not None: |
|||
a_traiter.empiler(noeud.gauche) |
|||
|
|||
|
|||
def parcours_dfs_prefixe(a): |
|||
"""Affiche tous les nœuds de l'arbre a par un parcours DFS préfixé.""" |
|||
if a is None: |
|||
return |
|||
print(a.valeur) |
|||
parcours_dfs_prefixe(a.gauche) |
|||
parcours_dfs_prefixe(a.droit) |
|||
|
|||
|
|||
def parcours_dfs_infixe(a): |
|||
"""Affiche tous les nœuds de l'arbre a par un parcours DFS préfixé.""" |
|||
if a is None: |
|||
return |
|||
parcours_dfs_infixe(a.gauche) |
|||
print(a.valeur) |
|||
parcours_dfs_infixe(a.droit) |
|||
|
|||
|
|||
def parcours_dfs_postfixe(a): |
|||
"""Affiche tous les nœuds de l'arbre a par un parcours DFS préfixé.""" |
|||
if a is None: |
|||
return |
|||
parcours_dfs_postfixe(a.gauche) |
|||
parcours_dfs_postfixe(a.droit) |
|||
print(a.valeur) |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
a = Arbre("A") |
|||
a.insere_gauche("B") |
|||
a.insere_droit("C") |
|||
a.gauche.insere_gauche("D") |
|||
a.gauche.insere_droit("E") |
|||
a.gauche.gauche.insere_droit("G") |
|||
a.droit.insere_gauche("F") |
@ -0,0 +1,111 @@ |
|||
#!/usr/bin/env python3 |
|||
# -*- coding: utf-8 -*- |
|||
""" |
|||
Created on Tue Sep 22 20:44:35 2020 |
|||
|
|||
@author: manu |
|||
""" |
|||
|
|||
|
|||
class Maillon: |
|||
"""Un maillon d'une liste chaînée.""" |
|||
def __init__(self, valeur, suivant): |
|||
self.valeur = valeur |
|||
self.suivant = suivant |
|||
|
|||
def __str__(self): |
|||
"""Renvoie une chane de caractères représentant le maillon.""" |
|||
return str(self.valeur) |
|||
|
|||
|
|||
class ListeChaine: |
|||
"""Une liste chaînée.""" |
|||
def __init__(self, tete=None): |
|||
"""Crée une liste vide, ou une liste dont la tete (un maillon) |
|||
est donnée.""" |
|||
self.__tete = tete |
|||
|
|||
def est_vide(self): |
|||
"""Indique si la liste est vide.""" |
|||
return self.__tete is None |
|||
|
|||
def tete(self): |
|||
"""Renvoie la valeur du premier élément de la liste.""" |
|||
if self.est_vide(): |
|||
raise IndexError("La liste vide n'a pas de tête") |
|||
return self.__tete.valeur |
|||
|
|||
def queue(self): |
|||
"""Renvoie la queue de la liste.""" |
|||
if self.est_vide(): |
|||
raise IndexError("La liste vide n'a pas de queue") |
|||
return ListeChaine(self.__tete.suivant) |
|||
|
|||
def ajoute(self, valeur): |
|||
"""ajoute `valeur` en tête de la liste.""" |
|||
self.__tete = Maillon(valeur, self.__tete) |
|||
|
|||
def __str__(self): |
|||
"""Renvoie une chaîne de caractères représentant la liste.""" |
|||
maillon = self.__tete |
|||
s = '' |
|||
while maillon is not None: |
|||
s = s + str(maillon.valeur) |
|||
maillon = maillon.suivant |
|||
if maillon is not None: |
|||
s += '->' |
|||
return s |
|||
|
|||
def __len__(self): |
|||
"""Renvoie la longueur de la liste.""" |
|||
maillon = self.__tete |
|||
long = 0 |
|||
while maillon is not None: |
|||
long = long + 1 |
|||
maillon = maillon.suivant |
|||
return long |
|||
|
|||
def __getitem__(self, n): |
|||
"""Renvoie l'élément d'indice n de la liste.""" |
|||
maillon = self.__tete |
|||
i = 0 |
|||
while i < n and maillon is not None: |
|||
i = i + 1 |
|||
maillon = maillon.suivant |
|||
if maillon is None or n < 0: |
|||
raise IndexError("Indice non valide") |
|||
return maillon.valeur |
|||
|
|||
def __add__(self, other): |
|||
"""Renvoie la liste correspondant à la concaténation des 2 listes.""" |
|||
if self.est_vide(): |
|||
return other |
|||
v = self.tete() |
|||
q = self.queue() |
|||
return ListeChaine(Maillon(v, (q + other).__tete)) |
|||
|
|||
def reverse(self): |
|||
"""Renvoie une liste correspondant à la liste renversée.""" |
|||
res = ListeChaine() |
|||
maillon = self.__tete |
|||
while maillon is not None: |
|||
res.ajoute(maillon.valeur) |
|||
maillon = maillon.suivant |
|||
return res |
|||
|
|||
|
|||
if __name__ == "__main__": |
|||
lst = ListeChaine() |
|||
print(lst.est_vide()) |
|||
lst.ajoute(306) |
|||
lst.ajoute(42) |
|||
lst.ajoute(205) |
|||
print(lst) |
|||
print(lst.est_vide()) |
|||
print(lst[0]) |
|||
print(lst[1]) |
|||
print(len(lst)) |
|||
lst2 = ListeChaine() |
|||
lst2.ajoute(18) |
|||
lst2.ajoute(45) |
|||
print(lst + lst2) |
Loading…
Reference in new issue