1 pièce(s) jointe(s)
remplissage d'un arbre n-aire
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):
Code:
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 |
Ma class utilisée ci dessus et que je vais réutiliser pour construire mon arbre est la suivante :
Code:
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;
}
} |
Et ma fonction récursive pour reparcourir l'arbre et le reconstruire :
Code:
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) |
Le résultat : la fonction genereTree fait UN parcours en profondeur!!!
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