/** This traversal specializes EulerTour to compute the value of the
  * expression represented by an arithmetic expression tree. It
  * assumes that the elements stored at the external nodes are of type
  * Integer and the elements stored at the internal nodes are of type
  * OperatorInfo, with method operation(Integer x, Integer y), which
  * returns the result of applying an arithmetic operation.  */
public class EvaluateExpressionTour extends EulerTour {
  public Object execute(BinaryTree T) {
    init(T); // calls method of superclass
    System.out.print("Value of the expression: ");
    System.out.println(eulerTour(tree.root()));
    return null;  // nothing interesting to return
  }
  protected void visitRight(Position v, TraversalResult r) {
    if (tree.isExternal(v)) r.out = v.element();
    else {
      OperatorInfo op = (OperatorInfo) v.element();
      r.out = op.operation((Integer) r.left, (Integer) r.right); 
    }
  }
}