2009-04-08 10 views

Répondre

3

Que diriez-vous de traverser un arbre binaire? par exemple.

private class NodeVisitor{ 
public void visit(VisitableNode<T> node){ 
    if (node!=null) { 
     print node.data; 
    } 
} 
} 



public class VisitableTree<T> { 

    private VisitableNode<T> root; 
    public void printNodes(){ 
    new NodeVisitor.visit(root); 
    } 

private class VisitableNode<T> { 
    T data; 
    VisitableNode<T> left; 
    VisitableNode<T> right; 
    public void visit(NodeVisitor<T> visitor){ 
     ..do something 
     visitor.visit(left); 
     visitor.visit(right); 
    } 
    } 
} 
+0

Est-ce vraiment récursif? Je suis soit manquant quelque chose, ou ce n'est pas. Je pense que vous voulez (dans votre classe VisitNode) visitor.visit (this); et puis vous appelez this.visit (à gauche) (et à droite). Voir [ce lien] (http://cs.lmu.edu/~ray/notes/binarytrees/). – javamonkey79

+0

Modifier mon dernier commentaire, il devrait être left.visit (visiteur) (et à droite) – javamonkey79

0

Je pense que le principal avantage est qu'il ne nécessite que des itérations sur les collections 1 niveau de profondeur. Il peut rappeler, mais au moins la méthode accept() sera propre.

Questions connexes