La fixation de ma mise en œuvre de la “aussitôt l'arbre transversal” algorithme avec une Pile
Partie, c'est que j'ai à mettre en œuvre une non-méthode récursive d'un afinde de la traversée d'un arbre binaire. Je suis un peu coincé. Voici ce que j'ai à ce jour:
public void inorder(BinaryTree v) {
Stack<BinaryTree> stack = new Stack<BinaryTree>();
stack.push(v);
System.out.println(v.getValue());
while(!stack.isEmpty()) {
while(v.getLeft() != null) {
v = v.getLeft();
stack.push(v);
System.out.println(v.getValue());
}
while(v.getRight() != null) {
v = v.getRight();
stack.push(v);
System.out.println(v.getValue());
}
stack.pop();
}
}
J'ai remarqué qu'il n'imprime que le côté gauche de mon arbre, par exemple,
A
/ \
B C
/ \ / \
D E F G
/ \
H I
/ \
J K
Donne A B D H J
OriginalL'auteur tenkii | 2013-03-13
Vous devez vous connecter pour publier un commentaire.
À la suite de votre code, la boucle while pour le
getLeft()
partie va tout le chemin vers le bas de la gauche de l'arbre, puis se ferme.v
est maintenant nœudJ
, qui n'a pas le droit de l'enfant de sorte que le prochain tandis que la boucle ne s'exécute pas.Essayez cet exemple de code: http://www.ashishsharma.me/2011/09/inorder-traversal-without-recursion.html
StackOverflow réponse: https://stackoverflow.com/a/12718147/1178781
OriginalL'auteur justderb
Vous permet de simplifier considérablement la ci-dessus avec une simple boucle while:
Fondamentalement le code ci-dessus pousse à gauche branches sur la pile jusqu'à ce qu'il atteigne le plus à gauche du nœud dans la branche. Puis il saute et le processus (vous pouvez l'imprimer ou faire autre chose avec elle) et puis il pousse la branche de droite sur la pile pour le processus depuis la branche gauche et le nœud lui-même est fait.
OriginalL'auteur Giovanni Botta
J'ai une solution qui utilise une boucle while. Il est semblable à Giovanni solution, mais à mon avis, il semble plus propre et plus lisible. Plus précisément, la conception est similaire à la solution récursive, En vue de la Traversée qui le rend plus facile à comprendre.
Remarque : j'ai utilisé l'interface Deque pour mettre en œuvre ma pile. Selon l'API, ce doit être la méthode préférée : http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html
OriginalL'auteur Haider
Une autre plus simple, binaire traversée de mise en œuvre :
OriginalL'auteur Deba Pal