Php

Fermé
maure - 18 déc. 2006 à 15:21
 maure - 22 déc. 2006 à 12:16
Bonjour,

J'ai un petit pb, je développe en php5.

Mon probleme c'est que j'ai une fonction getNoeud qui parcoure un arbre pour chercher un Noued dont l'identifiant est passé en parametre, la recherche se fait recursivement, le problème est que le resultat est toujours vide !!!

voici le code de ma fonction :

public function getNoeud($idArbre){
if ($this->_id == $idArbre){
return $this;
} else {
foreach ($this->_arbresChildren as $arbre){
if ($arbre->_id == $idArbre){
return $arbre;
} else {
$arbre->getNoeud($idArbre);
}
}
}
}

Est ce que vous y voyez une erreure de programmation?

d'avance merci.
A voir également:

3 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 déc. 2006 à 15:47
Bonjour,

Il y a en effet une petite erreur de programmation.
Reprenons ton algorithme : si je suis le noeud recherché, alors je me renvoie. Si je ne suis pas le noeud recherché, alors... Oui, alors, quoi ? Ben alors rien, je recherche si un de mes fils est le noeud recherché, mais je ne renvoie pas de résultat !

Par ailleurs, tu testes deux fois la même chose, tu peux supprimer un de tes tests.

Voilà ce que devient ta fonction :
public function getNoeud($idArbre)
{
    if ($this->_id == $idArbre)
    {
        return $this;
    }
    else
    {
        foreach ($this->_arbresChildren as $arbre)
        {
            return $arbre->getNoeud($idArbre);
        }
    }
}
Bon courage pour la suite :)

Xavier
0
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
18 déc. 2006 à 15:50
En effet, mais il y a encore juste un petit oubli. Si on retourne directe le résultat dans la boucle des fils, si ce résultat est nul (c'est à dire que le noeud que l'on cherche n'est pas contenu dans le sous arbre fil) alors la recherche s'arrete là et renvoi nul au lieu de faire la meme chose dans les autres sous arbres fils.
Ainsi il faut transformer comme suit :
public function getNoeud($idArbre)
{
    if ($this->_id == $idArbre)
    {
        return $this;
    }
    else
    {
        $retour_fil = null;
        foreach ($this->_arbresChildren as $arbre)
        {
            $retour_fil =  $arbre->getNoeud($idArbre);
            if ( $retour != null )
                return $retour_fil;
        }
    }
}
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
18 déc. 2006 à 15:56
Bien sûr, suis-je bête ^^'
0
Ca a marché,

Merci beaucoup pour vos réponses.
0