diff --git a/TD01/code/arbre_k_aire.py b/TD01/code/arbre-k-aire.py similarity index 54% rename from TD01/code/arbre_k_aire.py rename to TD01/code/arbre-k-aire.py index d230728c1ca9fc5005edb67936f62293f35d9077..652e42cedaadf5c9f5f56ea1990e6a2cb275a3c4 100644 --- a/TD01/code/arbre_k_aire.py +++ b/TD01/code/arbre-k-aire.py @@ -1,3 +1,5 @@ +import sys + class Noeud: def __init__(self, v, c = []): self.v = v @@ -11,6 +13,10 @@ def parcours_affiche(arbre): def parcours_recherche(arbre, valeur): + + if arbre is None: + return False + stack = arbre.c if valeur > arbre.v: @@ -19,15 +25,12 @@ def parcours_recherche(arbre, valeur): if valeur == arbre.v: return True - prev = stack[0].v + prev = sys.maxsize while len(stack) > 0: - children = stack.pop(0) - if valeur == children.v: return True - if valeur > prev and valeur < children.v: stack = children.c prev = stack[0].v @@ -36,8 +39,18 @@ def parcours_recherche(arbre, valeur): return False +if __name__=="__main__": + + racine = Noeud(13, [Noeud(4, [Noeud(1), Noeud(2), Noeud(3)]), Noeud(8, \ + [Noeud(5), Noeud(6), Noeud(7)]), Noeud(12, [Noeud(9), Noeud(10), Noeud(11)])]) + + print(parcours_affiche(racine)) + + # renvoie False pour un arbre vide + parcours_recherche(None, -1) -racine = Noeud(13, [Noeud(4, [Noeud(1), Noeud(2), Noeud(3)]), Noeud(8, [Noeud(5), Noeud(6), Noeud(7)]), Noeud(12, [Noeud(9), Noeud(10), Noeud(11)])]) + # 11 est dans l'arbre + assert parcours_recherche(racine, 11) == True -print(parcours_affiche(racine)) -print(parcours_recherche(racine, 11)) \ No newline at end of file + # 12 n'est pas dans l'arbre + assert parcours_recherche(racine, 12) == False \ No newline at end of file diff --git a/TD01/code/arbre-parcours-largeur.py b/TD01/code/arbre-parcours-largeur.py new file mode 100644 index 0000000000000000000000000000000000000000..91cf13a475c93e98d07f4a353e7065260fdf8539 --- /dev/null +++ b/TD01/code/arbre-parcours-largeur.py @@ -0,0 +1,35 @@ +class Noeud: + def __init__(self, v, c = []): + self.v = v + self.c = c + +def parcours(n): + stack = [] + stack.append(n) + r = [] + while len(stack) > 0: + current = stack.pop(0) + r.append(current.v) + for v in current.c: + stack.append(v) + return r + +if __name__=="__main__": + + print(parcours(Noeud(1, \ + [ \ + Noeud(2, [ \ + Noeud(4), Noeud(5) \ + ]), \ + Noeud(3) \ + ] \ + ) \ + )) + + # [1, 2, 3, 4, 5] + print(parcours(Noeud(5, [Noeud(4, [Noeud(2), Noeud(1)]), Noeud(3)]))) + # [5, 4, 3, 1, 2] + print(parcours(Noeud(5, [Noeud(1), Noeud(2), Noeud(3), Noeud(4)]))) + # [5, 1, 2, 3, 4] + print(parcours(Noeud(1, [Noeud(5), Noeud(4), Noeud(3), Noeud(2)]))) + # [1, 5, 4, 3, 2] diff --git a/TD01/code/arbre-tuple.py b/TD01/code/arbre-tuple.py new file mode 100644 index 0000000000000000000000000000000000000000..6eb10eecebb03357caee1c585b3fbde0ab0092a7 --- /dev/null +++ b/TD01/code/arbre-tuple.py @@ -0,0 +1,56 @@ +import sys + +class Noeud: + def __init__(self, v, c = []): + self.v = v + self.c = c + +def parcours_affiche(arbre): + for c in arbre.c: + parcours_affiche(c) + + print(arbre.v) + + +def parcours_recherche(arbre, valeur): + + if arbre is None: + return False + + stack = arbre.c + + if valeur > arbre.v: + return False + + if valeur == arbre.v: + return True + + prev = sys.maxsize + + while len(stack) > 0: + children = stack.pop(0) + if valeur == children.v: + return True + if valeur > prev and valeur < children.v: + stack = children.c + prev = stack[0].v + else: + prev = children.v + + return False + +if __name__=="__main__": + + racine = Noeud(13, [Noeud(4, [Noeud(1), Noeud(2), Noeud(3)]), Noeud(8, \ + [Noeud(5), Noeud(6), Noeud(7)]), Noeud(12, [Noeud(9), Noeud(10), Noeud(11)])]) + + print(parcours_affiche(racine)) + + # renvoie False pour un arbre vide + parcours_recherche(None, -1) + + # 11 est dans l'arbre + assert parcours_recherche(racine, 11) == True + + # 12 n'est pas dans l'arbre + assert parcours_recherche(racine, 12) == False \ No newline at end of file