J'ai un arbre binaire fait avec le constructeur suivant:Recherche d'un noeud dans un arbre en Java
public Person(String name, int age, char gender, Person c1, Person c2)
où c1 est l'enfant gauche et c2 est l'enfant droit.
Je souhaite écrire une méthode qui recherche un nom particulier dans une génération maximale. Donc, comme a.depthFirstSearch(Eva, 1);
où Eva est le nom à rechercher et 1 est le nombre maximum de générations (ou de niveaux) que je peux regarder.
Voici ce que j'ai: EDIT:
public Person depthFirstSearch(String name, int maxGeneration)
{
{
Person temp;
if (maxGeneration>1){
if (this.name.equals(name)){
temp=this;
return temp;
}
else{
if (child1!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
if (child2!=null)
temp=child1.depthFirstSearch(name, maxGeneration-1);
}
}
return null;
}
}
Il y a deux problèmes ici. Je pense que la profondeur est réinitialisée à 0 chaque fois que la fonction s'appelle elle-même, donc je sais que je peux soit garder la trace de la profondeur ailleurs ou trouver une alternative. L'autre problème, je pense, est que child2 n'est jamais vraiment atteint, puisque je reviens à child1. Je ne suis pas vraiment sûr de comment cela fonctionne, donc si quelqu'un pouvait expliquer ça, ce serait génial. Des suggestions pour certaines corrections? De plus, on me dit que je dois d'abord chercher la profondeur, c'est-à-dire regarder d'abord les générations les plus profondes. Je ne suis pas vraiment sûr de ce que cela signifie et de la différence avec la logique que j'utilise dans ma mise en œuvre.
S'il vous plaît voir le code édité, je ne suis toujours pas à le faire fonctionner .. – Snowman
@fprime: Voir ma réponse à jour. – casablanca
Merci beaucoup. Cela a fonctionné. Mais maintenant explique-moi quelque chose. Pourquoi avons-nous, après avoir vérifié temp! = Null, le renvoyer tout de suite? Lorsque nous avons temp = child1.depthFirstSearch (nom, maxGeneration-1); ', exécutons-nous d'abord la récursivité ou passons-nous à la ligne suivante qui vérifie' (temp! = Null) '? Je ne comprends pas comment cela fonctionne .. – Snowman