Voiçi un exemple qui montre comment on peut créer une variable, un tableau et possiblement une liste d'arbre binaire et peut-être même l'imbriquer dans une structure de donnée.
Ce code est inspiré de l'exemple d'arbre binaire de Comtois.
Si ce code peut être utile à quelqu'un...
A+
Guimauve
[EDIT] Affichage du nombre de noeud de chacun des arbres
Code : Tout sélectionner
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Nom du projet : Exemple d'arbre binaire
; Fichier : Arbre Binaire V1.pb
; Version : 1.0.1
; Programmation : CODE EXPÉRIMENTAL
; Programmé par : Guimauve
; Code Original : Comtois
; Date : 12-11-2006
; Mise à jour : 12-11-2006
; Codé avec PureBasic V4.01
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure Noeud
Mots.s
Compteur.l
Gauche.l
Droite.l
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetNoeudMots(Noeud, P_Mots)
Noeud\Mots = P_Mots
EndMacro
Macro SetNoeudCompteur(Noeud, P_Compteur)
Noeud\Compteur = P_Compteur
EndMacro
Macro SetNoeudGauche(Noeud, P_Gauche)
Noeud\Gauche = P_Gauche
EndMacro
Macro SetNoeudDroite(Noeud, P_Droite)
Noeud\Droite = P_Droite
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetNoeudMots(Noeud)
Noeud\Mots
EndMacro
Macro GetNoeudCompteur(Noeud)
Noeud\Compteur
EndMacro
Macro GetNoeudGauche(Noeud)
Noeud\Gauche
EndMacro
Macro GetNoeudDroite(Noeud)
Noeud\Droite
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.001 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure PrivateAfficheNoeuds(*Noeud.Noeud)
If *Noeud <> #Null
PrivateAfficheNoeuds(GetNoeudGauche(*Noeud))
Debug GetNoeudMots(*Noeud) + " =---> " + Str(GetNoeudCompteur(*Noeud)) + " fois"
PrivateAfficheNoeuds(GetNoeudDroite(*Noeud))
EndIf
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Fin de la définition du noeud <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; CODE GÉNÉRÉ AUTOMATIQUEMENT, NE PAS MODIFIER À
; MOINS D'AVOIR UNE RAISON TRÈS TRÈS VALABLE !!!
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Déclaration de la Structure <<<<<
Structure ArbreBinaire
QteNoeud.l
Noeud.Noeud
EndStructure
; <<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les mutateurs <<<<<
Macro SetArbreBinaireQteNoeud(Arbre, P_QteNoeud)
Arbre\QteNoeud = P_QteNoeud
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Les observateurs <<<<<
Macro GetArbreBinaireQteNoeud(Arbre)
Arbre\QteNoeud
EndMacro
Macro GetArbreBinaireNoeud(Arbre)NbTiret
Arbre\Noeud
EndMacro
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Code généré en : 00.001 secondes <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure AfficheArbreBinaire(*Arbre.ArbreBinaire)
PrivateAfficheNoeuds(GetArbreBinaireNoeud(*Arbre))
EndProcedure
Procedure.l PrivateAjouterNoeudArbre(*Arbre.ArbreBinaire, *Noeud.Noeud, Mot.s)
If GetArbreBinaireQteNoeud(*Arbre) = 0
SetArbreBinaireQteNoeud(*Arbre, GetArbreBinaireQteNoeud(*Arbre) + 1)
SetNoeudMots(*Noeud, Mot)
SetNoeudCompteur(*Noeud, 1)
SetNoeudGauche(*Noeud, #Null)
SetNoeudDroite(*Noeud, #Null)
Else
If *Noeud = #Null
*Noeud = AllocateMemory(SizeOf(Noeud))
If *Noeud
SetArbreBinaireQteNoeud(*Arbre, GetArbreBinaireQteNoeud(*Arbre) + 1)
SetNoeudMots(*Noeud, Mot)
SetNoeudCompteur(*Noeud, 1)
SetNoeudGauche(*Noeud, #Null)
SetNoeudDroite(*Noeud, #Null)
Else
MessageRequester("Erreur","Impossible d'allouer de la mémoire !",0)
End
EndIf
ElseIf UCase(Mot) = UCase(GetNoeudMots(*Noeud))
SetNoeudCompteur(*Noeud, GetNoeudCompteur(*Noeud) + 1)
ElseIf UCase(Mot) < UCase(GetNoeudMots(*Noeud))
SetNoeudGauche(*Noeud, PrivateAjouterNoeudArbre(*Arbre, GetNoeudGauche(*Noeud), Mot))
Else
SetNoeudDroite(*Noeud, PrivateAjouterNoeudArbre(*Arbre, GetNoeudDroite(*Noeud), Mot))
EndIf
EndIf
ProcedureReturn *Noeud
EndProcedure
Procedure AjouterNoeudArbre(*Arbre.ArbreBinaire, Mot.s)
PrivateAjouterNoeudArbre(*Arbre, GetArbreBinaireNoeud(*Arbre), Mot)
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< Fin de la définition de l'arbre <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Dim MyHeros.s(14)
MyHeros(00) = "Zoro"
MyHeros(01) = "Fred"
MyHeros(02) = "Yoda"
MyHeros(03) = "Freak"
MyHeros(04) = "Morpheus"
MyHeros(05) = "Fred"
MyHeros(06) = "Freak"
MyHeros(07) = "Zoro"
MyHeros(08) = "Hercule"
MyHeros(09) = "Yoda"
MyHeros(10) = "Luke"
MyHeros(11) = "Anakin"
MyHeros(12) = "Mace Windu"
MyHeros(13) = "Yoda"
MyHeros(14) = "Obiwan"
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
NbTiret = 40
Dim MesArbres.ArbreBinaire(1)
Debug LSet("", NbTiret, "-")
Debug "1er arbre binaire"
For Index = 0 To 14
AjouterNoeudArbre(MonArbre01.ArbreBinaire, MyHeros(Index))
Next
Debug "Nombre de noeud : " + Str(GetArbreBinaireQteNoeud(MonArbre01))
Debug LSet("", NbTiret, "-")
AfficheArbreBinaire(MonArbre01)
Debug LSet("", NbTiret, "-")
Debug "2e arbre binaire"
For Index = 14 To 0 Step - 1
AjouterNoeudArbre(MonArbre02.ArbreBinaire, MyHeros(Index))
Next
Debug "Nombre de noeud : " + Str(GetArbreBinaireQteNoeud(MonArbre02))
Debug LSet("", NbTiret, "-")
AfficheArbreBinaire(MonArbre02)
Debug LSet("", NbTiret, "-")
Debug "3e arbre binaire"
For Index = 0 To 14 Step 2
AjouterNoeudArbre(MesArbres(0), MyHeros(Index))
Next
Debug "Nombre de noeud : " + Str(GetArbreBinaireQteNoeud(MesArbres(0)))
Debug LSet("", NbTiret, "-")
AfficheArbreBinaire(MesArbres(0))
Debug LSet("", NbTiret, "-")
Debug "4e arbre binaire"
For Index = 13 To 0 Step - 2
AjouterNoeudArbre(MesArbres(1), MyHeros(Index))
Next
Debug "Nombre de noeud : " + Str(GetArbreBinaireQteNoeud(MesArbres(1)))
Debug LSet("", NbTiret, "-")
AfficheArbreBinaire(MesArbres(1))
; <<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< FIN DU FICHIER <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<