2 changed files with 120 additions and 1 deletions
@ -0,0 +1,113 @@ |
|||
#!/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") |
Loading…
Reference in new issue