Bonjour à tous,
Voilà j'ai un problème métaphysique, qui touche aux hauteurs algorithmique.
Depuis une base de données via php, je génère un menu cf fichier joint.
Ce menu est une liste (ul,li) modifier avec feuille de style et javascript qui vont bien pour lui donner cette allure et de l'interactivité.
Bien, maintenant, je souhaiterais régenerer mon arbre n-aire à partir du tableau de noeud ci dessous (constuit en php):
Ma class utilisée ci dessus et que je vais réutiliser pour construire mon arbre est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 // tableau contenant les noeuds var aNode=new Array(); // mon premier noeud var aFils=new Array(591,2,3,4,5); var oNode=new classNode('',0,aFils); // ajout du noeud dans le tableau aNode[aNode.length]=oNode; var aFils=new Array(16,1,586); var oNode=new classNode('0',591,aFils); // ajout du noeud dans le tableau aNode[aNode.length]=oNode; var aFils=new Array(164,165); var oNode=new classNode('591',16,aFils); // ajout du noeud dans le tableau aNode[aNode.length]=oNode; Ainsi de suite : la taille du tableau est de 650, donc je ne mets pas tout
Et ma fonction récursive pour reparcourir l'arbre et le reconstruire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // class qui permet de construire l'arbre function classNode(codePere,codeProgramme,aFils) { this.codePere=codePere; this.codeProgramme=codeProgramme; this.aFils=aFils; this.addFils = function addFils(oFils) { this.aFils[aFils.length]=oFils; } }
Le résultat : la fonction genereTree fait UN parcours en profondeur!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 // construction de l'arbre de facon recursive // quand on arrive dans cette fonction, le noeud est presque remplit, il manque plus que les fils function genereTree(oPere) { // on recherche l'element du tableau qui a le meme code que le noeud pere pour ajouter les fils for(indNode=0;indNode<aNode.length;indNode++) { if(aNode[indNode].codeProgramme==oPere.codeProgramme) { // parcours tous les fils iNbFils=aNode[indNode].aFils.length; element=aNode[indNode]; for(indChild=0; indChild<iNbFils ;indChild++) { // construit le noeud fils oNode alert(element.aFils[indChild]); oNode=new classNode(oPere.codeProgramme,element.aFils[indChild],new Array()); // ajoute le fils oNode au pere oPere oPere.addFils(oNode); // appel recursif pour ajouter le fils du fils oNode genereTree(oNode); } } } } // construction de la racine var tree=new classNode('',aNode[0].codeProgramme,new Array()); genereTree(tree); // on commence par le noeud 0 (la racine)
En d'autres termes : il me fait une seule branche avec au bout ses petites feuilles, mais il ne veut pas continuer sa construction.
Où me trompe je???
Déjà, merci aux personnes qui ont bien voulu prendre la peine de lire jusqu'ici.
Ensuite, les personnes qui essayerons de me proposer des solutions auront toute mon estime et ma gratitude et ma reconnaissance.
Sur ce bonne journée
Partager