CLASSE QUI PERMET DE GENERER UN ARBRE

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 25 août 2008 à 06:35
cs_nico1610 Messages postés 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 - 15 sept. 2008 à 08:41
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 395 Date d'inscription jeudi 26 août 2004 Statut Membre Dernière intervention 19 juin 2009 1
15 sept. 2008 à 08:41
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 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 août 2008 à 12:19
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
26 août 2008 à 10:49
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 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
26 août 2008 à 10:17
Salut,

Puisque ta source est manifestement du PHP5, pourquoi ne pas utiliser des itérateurs ?
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
25 août 2008 à 20:47
Je commence à comprendre ce que tu voulais me dire.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 août 2008 à 19:49
hum...

comme je l'ai dit dans mon message, tu peux faire en sorte que $node contienne un tableau d'objets Tree.
C'est ce qu'on fait generalement pour ce genre de choses, c'est beaucoup plus souple et beaucoup plus simple a manipuler.
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
25 août 2008 à 19:35
La recursivité: je connais très bien. Mais d'après ce que je sache, on peut pas créer une structure avec PHP à part les classes. Je pourrais modifier la source en utilisant des listes chainées avec des classes mais je trouve cela plus lourd que d'utiliser un Array.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 août 2008 à 16:57
sa fonction listNode est recursive...
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
25 août 2008 à 16:49
Ah ouais, moi j'ai compris qu'il ne savait pas ce qu'était la récursivité, autant pour moi.
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 août 2008 à 16:43
palleas_44, t'es hors sujet...

je parlais d'une structure qui contient un "pointeur" vers un autre element de cette structure

un peu comme une liste chainee.

pour un tableau, en general, on fait :
private $node = array();
mais $node contient un tableau d'objets Tree.
Palleas_44 Messages postés 130 Date d'inscription lundi 12 décembre 2005 Statut Membre Dernière intervention 19 avril 2009
25 août 2008 à 10:58
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
25 août 2008 à 09:14
Comme je suis debutant en PHP. C'est quoi une structure recursive?
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
25 août 2008 à 06:35
pourquoi ne pas faire une structure recursive ? c'est bien plus souple qu'un array...
Rejoignez-nous