Bonjour,
Je pense que tu pourrais utiliser un parcours en largeur de ton arbre.
Pour cela, on peut soit faire une récursion soit utiliser une file (une Queue<T> en .Net).
Avec une file, ce serait par exemple comme ceci :
Mettre la racine de l'arbre dans la file.
Puis boucler tant que la file n'est pas vide et à chaque itération :
- Prendre le premier élément de la file
- Le tester par rapport à ta condition
- S'il la vérifie, garder cet élément dans une liste de résultats
- S'il ne la vérifie pas, mettre les noeuds enfants dans la file
A la fin de cette itération, reprendre tes résultats pour constituer le treeview.
Autre possibilité (plutôt sur la base d'appels récursifs / parcours en profondeur) : marquer les noeuds en fonction de ta condition :
- Mettre la racine comme noeud courant
- Tester le noeud courant ou considérer la valeur transmise par le noeud parent :
S'il vérifie la condition : le marquer "ok" ; appeler (appel récursif) les noeuds fils avec "ok" pour les marquer
S'il ne vérifie pas la condition : appeler (appel récursif) les noeuds fils avec "nok" ; marquer le noeud courant avec "ok" si au moins un fils retourne "ok"
- Retourner la valeur (ok/nok) affectée au noeud courant
Espérant que ça te sera utile.
Bonne journée
Partager