Salut,
J'essaye de réaliser une fonction qui cherche un noeud dans une arbre n-aire. Pour cela j'ai fait cette fonction récursive non terminale :
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
|
void nAry::trouverUnNoeud(int val)
{
noeud* nt = NULL;
noeud* noeudRecherche = trouverUnNoeudPrivate(val,pRacine,nt);
if (noeudRecherche == NULL) cout<<"Noeud non trouvé.\n";
else cout<<"Trouvé..."<<noeudRecherche->val<<"\n";
}
nAry::noeud* nAry::trouverUnNoeudPrivate(int val,noeud* pNoeud, noeud* nt)
{
if(pNoeud == NULL) return NULL;
cout << pNoeud->val <<" "<<val<<"\n";
//Si le noeud est trouvé :
if (pNoeud->val == val)
{
cout<<"+++"<<pNoeud->val<<"\n";
nt = pNoeud;
return pNoeud;//elle retourne le noeud.
}
if (!pNoeud->fils.empty())
for (list<noeud*>::iterator it = pNoeud->fils.begin() ; it != pNoeud->fils.end() ; ++it)
//appel récursif.
nt = trouverUnNoeudPrivate(val,*it,nt);
return nt;
} |
Mais cette fonction est non terminal, parce que même si elle trouve le noeud, elle dépile la pile des appels récursifs.
dans le main, j'appelle avec :
nAryTree.trouverUnNoeud(2);
Partager