/**
* This traversal specializes EulerTour to compute the
* value of an arithmetic expression stored in the tree. It assumes
* that the elements stored at the external nodes are Integer objects
* and that the elements stored at the internal nodes are of type
* OperatorInfo, supporting method operation(Integer x, Integer y), which
* returns the result of applying an arithmetic operation to x and y.
*/
public class EvaluateExpressionTour extends EulerTour {
public Object execute(BinaryTree T) {
super.execute(T); // calls method of superclass
System.out.print("The value is: ");
System.out.println(eulerTour(tree.root()));
return null; // nothing interesting to return
}
protected void visitExternal(Position p, TraversalResult r) {
r.finalResult = (Integer) p.element();
}
protected void visitRight(Position p, TraversalResult r) {
OperatorInfo op = (OperatorInfo) p.element();
r.finalResult = op.operation((Integer) r.leftResult,
(Integer) r.rightResult);
}
}