Schéma récursif

jacma Messages postés 36 Statut Membre -  
crabs Messages postés 909 Statut Membre -
Bonjour
Je cherche un shéma clair exposant une démarche récursive pour lparcourir toutes les branches d'un arbre. Suivant le principe qu'un schéma vaut mieux que toute explication, j'ai vainement cherché un tel shéma.
A défautn l'exposé textuel de l'itération me suffirait peut-être.
Merci.

4 réponses

hssissen Messages postés 844 Date d'inscription   Statut Membre Dernière intervention   50
 
Salut,
Sand quelle langage? En C ou je ne sais pas C++, je crois qu'il y a une fonction qui s'appelle retrive(). À confirmer!
2
jacma Messages postés 36 Statut Membre
 
Merci de ta réponse
C'est en VB, mais je pense que cela doit se ressembler quel que soit le langage: c'est un shéma que je cherche. J'ai rélisé la fonction récursive qui fonctionne en VB me permettant de parcourir une arborscence, j'arrive à peu près à l'expliquer textuellement, mais d'une façon peut-être pas très claire, et c'est donc pour cela que je pense que le shéma me serait d'une grande utilité.
0
crabs Messages postés 909 Statut Membre 507
 
Salut,
Le principe est simple, mais ça dépend de la strcuture de ton noeud et de
comment tu gères le chainage des noeud.
Dans ce principe la racine n'a pas de frére, mais que des fils, et une feuille
n'a pas de fils : ça termine la récursivité.
parcourir( noeud )
  {
   pour tous les fils de noeud :
      parcourir( le fils courant )
  }

Pour l'appel :
parcourir( racine )

Habituellement une struture noeud au minimun possède les chainages suivant
-> noeud pere [nul pour la racine]
-> noeud premier fils [nul pour les feuilles]
-> noeud frère suivant [attention c'est pas une liste circulaire]
La boucle "pour tous les fils de noeud" devient :
PROCEDURE parcourir( NOEUD n )
DEBUT
  NOEUD fils ;
  // Faire le traitement sur le noeud
  fils=n.fils
  TANT.QUE( fils <> NUL )
  DEBUT
     APPELER parcourir(fils) ;
     fils = fils.frere ;
  FIN
FIN

A+, crabs
0
jacma Messages postés 36 Statut Membre
 
Merci de ta réponse.
Comme déja précisé, je connais et le principe et le code puisque j'ai programmé une procédure récursive qui parcourt toute l'arborescence. C'est vraiment un shém (un dessin (;-) que je recherche. Ci d'ailleurs cela peut servir, voici le code que je cherche à présenter en organigramme.

Private Sub WriteChild(ByVal iNodeIndex As Integer)
'Ecriture des noeuds enfants dans la table. C'est une procédure récursive pour
'parcourir dans une boucle tous les noeuds enfants. Elle identifie l'index
'du noeud ayant les enfants.

Dim i As Integer
Dim iTempIndex As Integer
iTempIndex = TreeView1.Nodes(iNodeIndex).Child.FirstSibling.Index
'Parcours tous les noeuds enfants d'un noeud parent (dans une boucle)
For i = 1 To TreeView1.Nodes(iNodeIndex).Children
rsNoeuds.AddNew
rsNoeuds("ID_NoeudParent") = TreeView1.Nodes(iTempIndex).Parent.Key
rsNoeuds("ID_Noeud") = TreeView1.Nodes(iTempIndex).Key
rsNoeuds("Nom_Noeud") = TreeView1.Nodes(iTempIndex).Text
rsNoeuds("Image") = TreeView1.Nodes(iTempIndex).Image
rsNoeuds("Selected_Image") = TreeView1.Nodes(iTempIndex).SelectedImage
rsNoeuds.Update

'Si le noeud en cours possède des noeuds enfants, la procédure fait appel à elle même (récurcivité)
If TreeView1.Nodes(iTempIndex).Children > 0 Then
WriteChild (iTempIndex)
End If
'Si ce n'est pas le dernier noeud enfant, on passe au noeud enfant suivant.
If i <> TreeView1.Nodes(iNodeIndex).Children Then
iTempIndex = TreeView1.Nodes(iTempIndex).Next.Index
End If
Next i

End Sub
0
crabs Messages postés 909 Statut Membre 507
 
Un shéma sur la recursivité, c'est comme l'image que l'on voit sur une télé
alors qu'on est en train de la filmer. Rien de simple...
Par contre tu peux proposer un dessin de ton arbre et montrer sur le shéma
la suite des appels et quand tu rencontres les phases principales de ton algo.
De plus tu numérote bien les étapes dans leur sens de déroulement et comme
tu remplis 'rsNoeuds'.
0