Parcours arbre

Parcours arbre - PHP - Programmation

Marsh Posté le 14-05-2004 à 10:09:11    

Bonjour,
 
J'ai une petite question sur le parcours d'un arbre à la manière d'une liste
chainée en C.
J'ai une table dans une base de donnée (mysql) composée comme suit:
 
un champ nom, un champ temps, un champ parent, un champ id
 
j'ai actuellement un arbre de ce style:
 
    1
   /  \
  3   2
 /
4
 
J'aimerais pouvoir sortir la somme de temps pour un noeud precis:
exemple pour le noeud 1 qui serait en fait la somme de temps de 2, 4 ou le
noeud 3 celle de 4 ou le noeud 2, la valeur de 2.
 
J'ai fait la fonction suivante qui prend en paramètre le numéros du noeud
pour lequel je veux connaitre la somme des temps attachés, le temps, et la
connexion à la SGBD.
 
function get_temps($id_tache, $temps, $lien) {
 $query = "select t_id from t_tache where t_parent = '$id_tache'";
 $result = mysql_query($query, $lien);
 $nbr = mysql_num_rows($result);
 
 if ($nbr == 0) {
  $query = "select t_temps_est from t_tache where t_id = '$id_tache'";
  $result2 = mysql_query($query, $lien);
  $row2 = mysql_fetch_row($result2);
  return ($row2[0]);
 } else {
  while ($row = mysql_fetch_row($result) ) {
   $temps += get_temps($row[0], $temps, $lien);
  }
 }
 return ($temps);
}
 
J'ai essayé avec des valeurs comme 50 et 20 pour les noeud 2 et 4 mais ça me
sort 120 !
Je ne sais pas trop comment faire et surtout comment optimiser mon truc
parce que j'ai remarqué que sur de gros arbres d'une centaines
d'enregistrements c'était plutôt lent.
 
Merci beaucoup de vos réponses.

Reply

Marsh Posté le 14-05-2004 à 10:09:11   

Reply

Marsh Posté le 14-05-2004 à 10:31:17    

A quoi sert l'argument $temps ? Pourrais tu mettre ton code entre balise cpp /cpp ? Et quelques commentaires ? Le code semble correct a priori. Par contre pour l'optimisation jte conseille plutot de construire un arbre implémenté sous forme de liste chainée objet ou d'un tableau, ce sera plus rapide pour l'acces aux fils que toutes ces requetes !


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 14-05-2004 à 10:42:31    

Ok je pense voir le problème. Ton argument temps ne sert à rien ! Pire il court-circuite le mécanisme de récursivité. Supprime le.


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Marsh Posté le 14-05-2004 à 10:55:36    

ok mais je l'initialise comment alors ?

Reply

Marsh Posté le 14-05-2004 à 10:56:23    

mais c'est magique !!! ça marche ! :)

Reply

Marsh Posté le 14-05-2004 à 10:57:16    

ok j'ai capté l'incrémentation était faites deux fois à cause de $temps, c'est plus clair.
 
Merci beaucoup.

Reply

Marsh Posté le 14-05-2004 à 11:48:56    

Bobarctor a écrit :

mais c'est magique !!! ça marche ! :)


ché la machique  :o


---------------
Posté depuis des chiottes, sales. Me gusta.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed