Browse Source

liste chainé ajouté et comment ça j'ai pu réajouté arbre.py

master
manon 4 weeks ago
parent
commit
5b9f65c123
  1. 113
      arbre.py
  2. 111
      listeChaine.py

113
arbre.py

@ -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")

111
listeChaine.py

@ -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…
Cancel
Save