2009-04-08 13 views

Antwort

3

Wie wäre es mit einem Binärbaum? z.B.

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

Ist das wirklich rekursiv? Ich vermisse etwas oder es ist nicht. Ich denke, Sie möchten (in Ihrer VisitNode-Klasse) visitor.visit (this); und dann nennst du das.besuch (links) (und rechts). Siehe [diesen Link] (http://cs.lmu.edu/~ray/notes/binarytrees/). – javamonkey79

+0

Wenn ich meinen letzten Kommentar ändere, sollte es verlassen werden.besuch (Besucher) (und rechts) – javamonkey79

0

Ich denke, der Hauptvorteil ist, dass es nur Iterationen über Sammlungen 1 Ebene tief erfordert. Es kann zurückrufen, aber zumindest die Methode accept() wird sauber sein.