J'ai un arbre non binaire avec des noeuds définis de la manière suivante:recherche récursive dans un arbre en Java
public class TreeNode{
private String label;
private TreeNode[] children;
public TreeNode(String label){
this.label = label;
children = new TreeNode[9]
}
Ainsi, chaque noeud a une étiquette et un tableau de taille 9 qui détient ses 9 enfants. Maintenant, dans ma classe d'arbre, je veux définir une méthode de recherche qui trouvera un nœud avec une étiquette spécifique. Voilà ce que je pouvais venir avec:
public TreeNode find(String label, TreeNode node) {
TreeNode result = null;
if (node.getLabel().equals(label)) {
return node;
} else {
if (node.hasChildren()){
for (int i = 0; i< node.getChildren().length; i++){
if (node.getChildren()[i].getLabel().equals(label)) {
result = node.getChildren()[i];
break;
else
return find(label, node.getChildren()[i];
}
return result;
}
Et le problème est qu'il va juste un niveau plus profond à chaque fois sans regarder à travers les frères et sœurs du je fournis « nœud » à la méthode.
Je suis sûr que la solution est triviale mais je n'arrive pas à l'attraper.
Il y a un similar question here et je pense que leur problème est également similaire mais je n'arrive pas à traduire la solution fournie dans mon application.
Qu'est-ce qui me manque? Merci de votre aide!
Merci. C'est ce qu'il a fait. Recommandez-vous de bonnes ressources pour apprendre la récursivité? – doddy
@doddy Ah, heureux d'entendre. Eh bien, j'ai toujours senti que la récursivité était plus facile à comprendre que l'itération (dans la plupart des cas). J'ai appris uniquement par l'expérimentation et l'étude des opérations récursives communes avec des arbres et des listes. Il y a beaucoup de sources en ligne, SO étant l'un d'entre eux. Regardez la traversée des arbres et les opérations si vous êtes intéressé. –
@ cᴏʟᴅsᴘᴇᴇᴅ le plus simple est: 'pour comprendre la récursivité, il faut d'abord comprendre la récursivité' – xenteros