CLASSE QUI PERMET DE GENERER UN ARBRE

Signaler
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
-
cs_nico1610
Messages postés
402
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
19 juin 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47723-classe-qui-permet-de-generer-un-arbre

cs_nico1610
Messages postés
402
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
19 juin 2009
1
Source amusante,
il est vrai qu'on apprend rapidement à utiliser une structure récursive pour gérer les arbres, simplement chainé ou doublement chainé.

Rapidement une classe node va avoir un (simplement) ou deux (doublement) pointeur sur d'autre classe node. Pour les simples, c'est généralement le suivant, pour les doubles on ajoute le précédent, ensuite on peu circuler dans la node sans problème. Il ne reste plus qu'a mettre les methodes del(), add(), move() ... et tout ce qui te paraitera utile.

Dans un chaine, il n'y a que deux elements maximum autour d'une node (le précedent et le suivant), le problème de l'arbre est qu'une node a comme dénominateur un parent qui peut être le méme que pour d'autre node. La solution reviens alors à soit faire un arbre simple (on indique que le parent) soit un arbre complexe, chaque node aura en reférence son parent mais aussi le nombre d'enfant qu'elle possède et au besoin un indexage.
Pour finir il faut, là aussi, ajouter les méthodes, un peu plus complexe:
-add_child() / ajouter un enfant
-add_same() / ajouter une node au même niveau
-del() / ne pas oublier que supprimer un parent doit aussi tuer tout ces enfants ! (je sais c'est mal mais c'est du code)
-move_up() / permet de remonter l'enfant au niveau de son parent
et toutes les méthodes qui peuvent être utile ...

Désolé pour mon français, j'ai beau me relire ça persiste!

Ergo.
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Désolé... ^^ Mais j'adooooore les itérateurs...

Euh donc, logiquement, avec des itérateurs, ton code sera infiniment plus lisible, infiniment plus facile à maintenir, etc. Par contre, utiliser des itérateurs risque de faire passer le niveau de débutant à initié, et le code, s'il est plus lisible, ne sera pas forcément plus facile d'accès pour un débutant (précision : pour un débutant qui ne veut pas chercher à comprendre).
La classe RecursiveArrayIterator de la SPL est toute désignée pour manipuler des tableaux "récursifs".
http://www.php.net/~helly/php/ext/spl/
gagah1
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

Je le savais, je me dis si je poste cette source on me demandera d'utiliser des itérateurs, des interfaces...
Je sais pas si avec un tableau le code est plus leger ou avec des itérateurs?
neigedhiver
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
15
Salut,

Puisque ta source est manifestement du PHP5, pourquoi ne pas utiliser des itérateurs ?