Récursivité en java
jean
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je voulais quémander un peu d'aide parce que là je patauge,
bon pour faire simple : je dois créer un arbre binaire mais je ne peux pas utiliser d'arraylist, de tableau ou autre outils de ce style,
je suis censé utilisé la notion de pointeur,
jusque là pas de soucis,
le truc c'est que je fais appel à la récursivité pour parcourir l'arbre (soit pour l'affichage intégral, soit pour insérer un nouvel élément),
=> pour l'affichage intégral pas de soucis : en 2 mots le contenu de la méthode : System.out.println(this.nom);
if (this.getFilsGauche != null)
affichageIntegral(this.getFilsGauche());
iif (this.getFilsDroit != null)
affichageIntegral(this.getFilsDroit());
ça fonctionne impect (sachant que mon arbre peut descendre jusqu'au niveau 50,
je rencontre des probleme dans la méthode insérer : ici le user doit donner le nom de la branche de l'arbre à laquelle il veut ajouter un enfant et donner le nom de cet enfant,
donc dans ma méthode insérer je fais appel à une méthode rechercher (String nomBranche) qui elle fait appel à la récursivité,
concretement cette méthode rechercher renvoie la branche (le noeud) que le user a choisi
donc contenu de cette méthode :
rechercher (String nomBranche){
Noeud racine= null;
if (this.nom.equals(nomBranche))
racine = this;
else{
if (this.getFilsGauche() != null)
racine = rechercher (this.getFilsGauche());
if (this.getFilsDroit() != null)
racine = rechercher (this.getFilsdroit());
}
return racine;
}
le probleme ici c'est que si dans le premier fils gauche il y a admetons 4 niveau, et que le user veut insérer un enfant au niveau 2 du premier fils droit, ma méthode n'arrive pas à remonter jusqu'en haut (dans ce cas la racine de l'arbre) donc ma méthode renvoie null, et j'ai un nullpointerException, donc si quelqu'un sait m'éclairer cela m'aiderait grandement,
si je n'ai pas été très clair dans mes explications n'hésitez pas à me le faire savoir !
merci d'avance à tous ceux qui liront ce message.
je voulais quémander un peu d'aide parce que là je patauge,
bon pour faire simple : je dois créer un arbre binaire mais je ne peux pas utiliser d'arraylist, de tableau ou autre outils de ce style,
je suis censé utilisé la notion de pointeur,
jusque là pas de soucis,
le truc c'est que je fais appel à la récursivité pour parcourir l'arbre (soit pour l'affichage intégral, soit pour insérer un nouvel élément),
=> pour l'affichage intégral pas de soucis : en 2 mots le contenu de la méthode : System.out.println(this.nom);
if (this.getFilsGauche != null)
affichageIntegral(this.getFilsGauche());
iif (this.getFilsDroit != null)
affichageIntegral(this.getFilsDroit());
ça fonctionne impect (sachant que mon arbre peut descendre jusqu'au niveau 50,
je rencontre des probleme dans la méthode insérer : ici le user doit donner le nom de la branche de l'arbre à laquelle il veut ajouter un enfant et donner le nom de cet enfant,
donc dans ma méthode insérer je fais appel à une méthode rechercher (String nomBranche) qui elle fait appel à la récursivité,
concretement cette méthode rechercher renvoie la branche (le noeud) que le user a choisi
donc contenu de cette méthode :
rechercher (String nomBranche){
Noeud racine= null;
if (this.nom.equals(nomBranche))
racine = this;
else{
if (this.getFilsGauche() != null)
racine = rechercher (this.getFilsGauche());
if (this.getFilsDroit() != null)
racine = rechercher (this.getFilsdroit());
}
return racine;
}
le probleme ici c'est que si dans le premier fils gauche il y a admetons 4 niveau, et que le user veut insérer un enfant au niveau 2 du premier fils droit, ma méthode n'arrive pas à remonter jusqu'en haut (dans ce cas la racine de l'arbre) donc ma méthode renvoie null, et j'ai un nullpointerException, donc si quelqu'un sait m'éclairer cela m'aiderait grandement,
si je n'ai pas été très clair dans mes explications n'hésitez pas à me le faire savoir !
merci d'avance à tous ceux qui liront ce message.
A voir également:
- Récursivité en java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
"je suis censé utilisé la notion de pointeur, jusque là pas de soucis"
Attention : il n'y a pas de pointeurs en Java ! Ce sont des références et ça ne marche pas tout à fait pareil qu'en C par exemple...
Pour ta fonction, ton paramètre est un String, mais tu lui passes récursivement des Noeuds... c'est pas très cohérent !
De plus si tu vas à gauche (et que tu trouves) tu ne devrais pas aller à droite or c'est ce que tu fais en ne mettant pas de else ou de return...
Une dernière chose, s'il n'y a pas d'ambiguïté, le this est sous-entendu donc on évite de le mettre pour rien.
Attention : il n'y a pas de pointeurs en Java ! Ce sont des références et ça ne marche pas tout à fait pareil qu'en C par exemple...
Pour ta fonction, ton paramètre est un String, mais tu lui passes récursivement des Noeuds... c'est pas très cohérent !
De plus si tu vas à gauche (et que tu trouves) tu ne devrais pas aller à droite or c'est ce que tu fais en ne mettant pas de else ou de return...
Une dernière chose, s'il n'y a pas d'ambiguïté, le this est sous-entendu donc on évite de le mettre pour rien.
Noeud rechercher(String nomBranche) { if (nom.equals(nomBranche)) return this; if (getFilsGauche() != null) { Noeud n = rechercher(getFilsGauche().nom); if (n!=null) return n; } if (getFilsDroit() != null) { Noeud n = rechercher(getFilsDroit().nom); if (n!=null) return n; } return null; }