2009-04-08 3 views

ответ

3

Как насчет прохождения двоичного дерева? например

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

Действительно ли это рекурсивно? Я либо что-то упускаю, либо нет. Я думаю, что вы хотите (в вашем классе VisitNode) visitor.visit (это); и затем вы вызываете this.visit (слева) (и справа). См. [Эту ссылку] (http://cs.lmu.edu/~ray/notes/binarytrees/). – javamonkey79

+0

Внесение изменений в мой последний комментарий, это должно быть left.visit (посетитель) (и справа) – javamonkey79

0

Я думаю, что главным преимуществом является то, что он требует только итераций над коллекциями уровня 1 уровня. Он может перезвонить, но по крайней мере метод accept() будет чистым.