Consider the two different techniques we used for implementing traversals of a binary tree. Why must we check before the call to preorder when implementing it as a method, whereas we could check inside the call when implementing it as a function?
Modify the buildParseTree and evaluate methods to handle Boolean statements (&&, ||, and !). Remember that ! is a unary operator, so this will complicate your code somewhat.