Parcourez l'arbre de recherche binaire pour trouver toutes les feuilles
Je suis assez nouveau dans les arbres, et je suis en train de créer une sorte de "feuille de itérateur". Je pense qu'il devrait mettre tous les nœuds qui n'ont pas de .left
et .right
valeur sur une pile, mais je ne suis pas sûr de savoir comment ou même si c'est la bonne chose à faire. J'ai essayé de chercher, mais tous les exemples que je viens sur commence par aller à l'extrême gauche de la feuille, et va p = node.parent
et je suis d'éviter reliant le nœud parent.
Je ne comprends pas comment je peux repeatedlty commencer à partir de la racine et de passer à travers les vignes sans la visite de la même vigne.
MODIFIER
Je vois des gens suggère d'utiliser une méthode itérative pour résoudre ce problème, et je suis d'accord maintenant. Mais j'ai été frapper ma tête en essayant de trouver la solution pour un itérateur-classe-façon de le faire pendant un certain temps, et j'aimerais savoir si c'est possible, et comment!
source d'informationauteur Sti
Vous devez vous connecter pour publier un commentaire.
Utiliser la récursivité:
commencer par la fourniture de
root
:Afin de traduire cela en un
Iterator<Node>
vous aurez à traduire la récursivité de la boucle, puis à la traversée de l'etat. Non-trivial, mais devrait vous donner beaucoup de plaisir.Je ne sais pas si le code ci-dessus fonctionne, mais qui est quelque part le long des lignes de ce qui doit être fait. Une autre option est javax.swing.TreeModel (demi-blague).
Ici est de savoir comment on pourrait mettre en œuvre un Itérateur qui ne renvoie des nœuds feuilles, c'est à dire les nœuds sans gauche ou à droite de la sous-arborescence.
L'itérateur recherches pour les nœuds feuilles de l'arbre en faisant une recherche depth-first, se souvenant de l'état actuel de la recherche dans une pile et "pause" quand il a trouvé un nœud feuille (voir fetchNext() la méthode).
La recherche est reprise lorsque le client "consomme" de la feuille de nœud par l'appel à next().