Data Structure for Representing a Math Expression
Different representations are useful for different purposes. Think what kinds of things you might want to do with the expression, and think how each of them would be done using the stack representation and using the binary tree representation, and choose for yourself.

For fun, you may also want to consider something completely different, e.g. the english language representation: e.g. "the product of the sum of a and b, and the difference between c and d over e", or the representation as X86 machine code which would compute this expression, etc.

Things you may want to do with an expression (in any particular program you would probably need only a small subset of these): 


Evaluate it, given certain values of the variables

Just once
Evaluate the same expression repeatedly for different values, with very high performance requirements

Perform simple algebraic manipulation, e.g. simplifications such as replacing x - x => 0, x*1 => x, etc.
Perform sophisticated algebraic manipulation on it, e.g. factorize the polynomials, compute derivatives or integrals.
Understand the expression stored in a variable when you're debugging the program
Format it as a string for displaying to the user
Render it as a mathematical expression to MathML
Draw it as a mathematical expression on a Javascript canvas
Compare two expressions for equivalence
Compare two expressions for equivalence ignoring variable names, e.g. a * a + b being equivalent to p * p + q
Convert a user-supplied string into an expression, checking it for well-formedness
...


Honestly speaking, I can find only one item of these for which the stack representation can possibly make things easier than the binary tree representation, and the array representation seems just completely useless.