Points taken off only once for each criteria. Correctness 40 pts C1 Backwards subtraction -2 C2 Backwards division -2 C3 Incorrect base case (single number expression) -2 C4 Inability to do double negation (more simply negation of complex expressions) -2 C5 No check for divide by zero -5 C6 Incorrect tree construction -4 C7 Incorrect tree evaluation -4 C8 Incorrect tree printing -4 C9 Does not complile -10 C10 Inability to read non-single digit numbers -5 Style 60 postfixEval 10 S1.1 Bad stack implementation (if array used, must resize by constant factors) -3 S1.2 Stack should be private to stack class -2 S1.3 Pop, pop, push to eval -2 S1.4 Did not check for empty stack either by throwing exception in pop or checking manually before pop -3 prefixEval 10 S2.1 Bad recursive structure -5 S2.2 Used trees, queues, arrays, etc. -5 infix stuff 20 S3.1 Did not use three kinds of trees (zeroary, unary, binary) -10 full credit for binary as 1 class or 4. (-3 instead, for using add, sub, mul ... without binary class) S3.2 Did not eval in post-order -3 S3.3 Did not print in in-order -3 S3.4 Did not call root's eval/toString in infixEval()/infixString() -4 exceptions 10 S4.1 Did not throw appropriately (divide by zero and illegal input) -5 S4.2 Bad try-catch structure -5 other 10 S5.1 Bad control structure to determine cases -3 S5.2 comments, illegible code, indentation etc. -3 S5.3 Commented out parts of main (not because it wasn't implemented) -1 S5.4 Classes not divided into files properly -3 Extra credit 10 E1 Correctness (div/sub not associative, no extra parens, all necessary parens, etc.) -5 Most people who did the extra credit got the following case incorrect: For a prefix expression of / * + ~ 1 2 3 + ~ 4 2, the output should be (~1+2)*3/(~4+2) E2 Style (passing current precedence to child) -5