Essaie de voir les choses ainsi :
T'as un arbre, sur lequel tu veux faire des choses. Dis-toi que le cas "initial", c'est "ce que je fais comme traitement quand je rencontre un noeud".
Donc si tu veux compter le nombre de noeuds contenant une chaine, ca serait, imaginons : "cpt++ ;".
Ensuite tu te dis que chaque noeud peut avoir des enfants, donc tu vas tester chacun d'entre eux aussi !
Donc en gros ca donne, si je me trompe pas (il est tard), dans la classe de ton arbre par exemple :
Code:
private int getNbElems(Noeud n){
int cpt = 0 ;
if ( n.getElement() != null ) cpt++ ; // je compte la chaine courante
if ( n.getFilsGauche() != null ) cpt = cpt + getNbElems(n.getFilsGauche()); // j'appelle la méthode sur le fils gauche
if ( n.getFilsDroit() != null ) cpt = cpt + getNbElems(n.getFilsDroit()); // pareil mais sur le fils droit
return cpt ;
Et tu fais une autre méthode, publique cette fois, qui va etre appellée quand tu instanciera ta classe Arbre, par ex :
Code:
public int getNbChaines (){
return this.getNbElems( this.racine ); // si tu as un attribut racine hein :p
}
Si tu procede ainsi je pense que tu peux arriver à tout faire

Donc décompose chaque étape pour un élément, et ses enfants s'il en as, et le tour est joué
Bien sur ce code, je viens de le taper donc ca compilera surement pas, et faut adapter ca, évidemment...
Perso j'adore la récusivité, je trouve ca archi-puissant si bien utilisé ! Donc tu es bien tombé là
ps : pre-ordre, c'est quoi ? C'est pas l'ordre dans lequel lire l'arbre ? genre gauche-courant-droit par ex ? Bah dans ton traitement tu fais d'abord le comptage du fils gauche au lieu de faire d'abord l'élément courant, etc. !
J'espere que ca t'as aidé
