import java.util.*;

abstract class ExpressionNode {
    public abstract void evaluate(Stack<Double> s);
}

class NumberNode extends ExpressionNode {
    // to be implemented
    NumberNode(double d) {}
    public void evaluate(Stack<Double> s) {}
}

class PlusOperatorNode extends ExpressionNode {
    // to be implemented
    public void evaluate(Stack<Double> s) {}
}

class Evaluation {
    public static void main(String args[]) {
        BTreeIt<ExpressionNode> mytree = 
            new BTreeIt<ExpressionNode>(new PlusOperatorNode());
            
        BTreeIt<ExpressionNode> left = 
            new BTreeIt<ExpressionNode>(new NumberNode(3.0));

        BTreeIt<ExpressionNode> right = 
            new BTreeIt<ExpressionNode>(new NumberNode(2.0));

        mytree.addLeft(left);
        mytree.addRight(right);

        Stack<Double> mystack = new Stack<Double>();

        Iterator<ExpressionNode> it = mytree.postOrderIterator();
        while (it.hasNext()) it.next().evaluate(mystack);

        System.out.println("Result: " + mystack.pop());

    } 
}