我在大学里有这样的任务来写一个访问者,它计算了AbstractTree的深度。这是树:
public abstract class AbstractTree {
public abstract void Accept(AbstractVisitor abstractVisitor);
}
public class Leaf : AbstractTree {
public override void Accept(AbstractVisitor visitor) {
visitor.VisitLeaf(this);
}
}
public class Node : AbstractTree {
private AbstractTree Left { get; set; }
private AbstractTree Right { get; set; }
public Node(AbstractTree left, AbstractTree right) {
Left = left;
Right = right;
}
public override void Accept(AbstractVisitor visitor) {
visitor.VisitNode(this);
if (Left != null)
Left.Accept(visitor);
if (Right != null)
Right.Accept(visitor);
}
}
和AbstractVisitor:
public abstract class AbstractVisitor {
public abstract void VisitLeaf(Leaf tree);
public abstract void VisitNode(Node tree);
}
但是如何编写具体的DepthVisitor?当访问者知道树结构(depth-computing visitor that knows about the tree structure)时,我知道如何执行此任务,但在这种情况下,访问者几乎不了解树结构(必须这样,任务就像这样制定)。
答案 0 :(得分:0)
您可以展示树的某些属性,并将每个访问节点的深度存储在访问者中。
您的访问者可以保留(树,深度)对的地图。