/** This traversal specializes EulerTour to print out the expression
  * stored in an arithmetic expression tree. It assumes that method
  * toString, when called on a node v, prints the value stored at v if
  * v is external and the operator stored at v, if v is internal.  */
public class PrintExpressionTour extends EulerTour {
  public Object execute(BinaryTree T) {
    init(T);
    System.out.print("Expression: ");
    eulerTour(T.root());
    System.out.println();
    return null;   // nothing interesting to return
  }
  protected void visitLeft(Position v, TraversalResult r) { 
    if (tree.isInternal(v)) System.out.print("("); }
  protected void visitBelow(Position v, TraversalResult r) { 
    System.out.print(v.element()); }
  protected void visitRight(Position v, TraversalResult r) { 
    if (tree.isInternal(v)) System.out.print(")"); }
}