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 :
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
 
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
nAryTree.trouverUnNoeud(2);