Package: abrviz
abrvizInstallationpip3 install abrvizExemple 0CodefromabrvizimportArbre,Noeudvaleurs=[3,4,7,9,5,8,1,0,6,2]noeuds=[Noeud(i)foriinvaleurs]a=Arbre()forninnoeuds:a.inserer(n)texte=f"""Affichage imbriquée :{a}Hauteur :{a.hauteur()}Taille :{len(a)}Les parcours fournissent des listes d'objets :Parcours en largeur :{a.largeur}Pour obtenir les clés, on demande les valeurs :Parcours en largeur :{[n.valeurfornina.largeur]}Parcours prefixe :{[n.valeurfornina.prefixe]}Parcours infixe :{[n.valeurfornina.infixe]}Parcours suffixe :{[n.valeurfornina.suffixe]}Une liste 'complète' en largeur peut être obtenue :{[nifnotnelsen.valeurfornina.liste_aplatie()]}Recherche du noeud de clé 5 :le noeud :{a.rechercher(5).__repr__()}son arborescence :{a.rechercher(5)}sa valeur :{a.rechercher(5).valeur}son contenu (éventuellement transporté dans sa structure) :\{a.rechercher(5).contenu}le chemin qui y mène :{[n.valeurfornina.chemin_vers(a.rechercher(5))]}Si on connaît une référence vers le noeud, on peut l'utiliser.le noeud de clé 5 est le 4ème de la liste noeuds :\{noeuds[4]}"""print(texte)a.supprimer(noeuds[0])texte=f"""Nouveau parcours en largeur après suppression de la racine :{[n.valeurfornina.largeur]}"""print(texte)Sortie consoleAffichageimbriquée:(((None--0--None)--1--(None--2--None))--3--(None--4--((None--5--(None--6--None))--7--((None--8--None)--9--None))))Hauteur:5Taille:10Lesparcoursfournissentdeslistesd'objets :Parcoursenlargeur:[<abrviz.abrviz.Noeudobjectat0x7fec0c283eb0>,<abrviz.abrviz.Noeudobjectat0x7fec0c283880>,<abrviz.abrviz.Noeudobjectat0x7fec0c283f10>,<abrviz.abrviz.Noeudobjectat0x7fec0c38c0d0>,<abrviz.abrviz.Noeudobjectat0x7fec0c14da90>,<abrviz.abrviz.Noeudobjectat0x7fec0c283f40>,<abrviz.abrviz.Noeudobjectat0x7fec0c283fa0>,<abrviz.abrviz.Noeudobjectat0x7fec0c283d30>,<abrviz.abrviz.Noeudobjectat0x7fec0c14d760>,<abrviz.abrviz.Noeudobjectat0x7fec0c283c70>]Pourobtenirlesclés,ondemandelesvaleurs:Parcoursenlargeur:[3,1,4,0,2,7,5,9,6,8]Parcoursprefixe:[3,1,0,2,4,7,5,6,9,8]Parcoursinfixe:[0,1,2,3,4,5,6,7,8,9]Parcourssuffixe:[0,2,1,6,5,8,9,7,4,3]Uneliste'complète'enlargeurpeutêtreobtenue:[3,1,4,0,2,None,7,None,None,None,None,None,None,5,9,None,None,None,None,None,None,None,None,None,None,None,None,None,6,8]Recherchedunoeuddeclé5:lenoeud:<abrviz.abrviz.Noeudobjectat0x7fec0c283fa0>sonarborescence:(None--5--(None--6--None))savaleur:5soncontenu(éventuellementtransportédanssastructure):Nonelecheminquiymène:[3,4,7,5]Sionconnaîtuneréférenceverslenoeud,onpeutl'utiliser.lenoeuddeclé5estle4èmedelalistenoeuds:(None--5--(None--6--None))Nouveauparcoursenlargeuraprèssuppressiondelaracine:[2,1,4,0,7,5,9,6,8]Exemple 1CodefromabrvizimportArbre,Noeuda=Arbre()liste=[Noeud(i)foriin[3,2,1,5,4,6]]foriinliste:a.inserer(i)# on visualise l'arbrea.sortie(a.racine,"exemple1_0","png")# on demande une visualisation en arbre binaire complet : un peu# plus d'espace dans la dernière lignea.sortie(a.racine,"exemple1_1","png",style="complet")# on demande une visualisation à partir du 2ème noeud rentréa.sortie(liste[1],"exemple1_2","png")# on supprime la racine puis on visualise le nouvel arbre en pdfa.supprimer(liste[0])a.sortie(a.racine,"exemple1_3","pdf")Sortie ImagesExemple 2CodefromabrvizimportArbre,Noeudimportrandomliste=list(range(15))random.shuffle(liste)a=Arbre()foreinliste:a.inserer(Noeud(e))# Visualisation de l'arbremon_noeud=a.racinea.sortie(mon_noeud,"exemple2_0","png")# on peut demander une version "complète" avec les noeuds# invisibles d'un arbre binaire complet : l'apparence est très# largea.sortie(mon_noeud,"exemple2_1","png",style="complet")# s'il y a un sous-arbre gauche, on le visualiseifmon_noeud.gaucheisnotNone:a.sortie(mon_noeud.gauche,"exemple2_2","png")Sortie ImagesExemple 3CodefromabrvizimportArbre,Noeudimportrandomliste=list(range(20))random.shuffle(liste)a=Arbre()# on change la fonction de la relation d'ordrea.fonction_ordre=lambdax,y:str(x.valeur)<str(y.valeur)foreinliste:a.inserer(Noeud(e))a.sortie(a.racine,"exemple3_0","png")# on change le styleArbre.options('node',{"style":"filled"})Arbre.options('edge',{"arrowhead":"diamond","arrowsize":"1"})a.sortie(a.racine,"exemple3_1","png")# les flèches se courbentArbre.options('graph',{"splines":"true"})a.sortie(a.racine,"exemple3_2","png")Sortie ImagesExemple 4CodefromabrvizimportArbre,Noeud# dictionnaire, les valeurs seront les clés de l'arbredico_contenu={"abricot":2,"poire":5,"pomme":1,"ananas":7,"kiwi":0}a=Arbre()forkindico_contenu:a.inserer(Noeud(dico_contenu[k],k))# les noeuds montreront le contenu du noeud et non la clé ("valeur")Arbre.etiquette="contenu"a.sortie(a.racine,"exemple4_0","png")# pour visualiser un mix des deux (clés et valeurs du dictionnaire)# on redéfinit l'arbre et les noeuds :a=Arbre()forkindico_contenu:noeud=Noeud(dico_contenu[k])# le contenu du noeud reprend les données complètes du dictionnairenoeud.contenu=f"{k}({dico_contenu[k]})"a.inserer(noeud)Arbre.etiquette="contenu"a.sortie(a.racine,"exemple4_1","png")Sortie ImagesExemple 5CodefromabrvizimportArbre,Noeudliste=[2,3,6,0,4,5,1]liste_noeuds=[Noeud(i)foriinliste]a=Arbre()foreinliste_noeuds:a.inserer(e)# On peut effectuer des mouvements de rotation à droite ou à gauche# L'arbre reste un ABRa.sortie(a.racine,"exemple5_0","png")# le noeud "racine" du changement est passé en argumenta.rotation_gauche(a.rechercher(2))a.sortie(a.racine,"exemple5_1","png")# on peut alors équilibrer l'arbrea.rotation_gauche(a.rechercher(0))a.rotation_droite(a.rechercher(2))a.rotation_gauche(a.rechercher(4))a.rotation_droite(a.rechercher(6))a.sortie(a.racine,"exemple5_2","png")Sortie ImagesLicenceCC-BY-NC-SA