I don't understand why you need an array of integers for scale and precision here. Just figure out the precision and scale for the entire subtraction expression here (or in a helper) and store it on this expression. If the algorithm is taking the max for the lhs and rhs, just take the max of all the children instead. You don't need to calculate it for each pair - just calculate it for all the child expressions.

Also, I'm not sure what the NumberUtil and NumericOperators enum is buying you. You're going from an OO method down to a switch on an enum. For division and multiplication, just include the logic in the class directly. It looks like it's shared/the same for addition and subtraction. How about just having a NumberUtil function that is used by both directly? Or maybe even just repeat the logic - looks like it's just doing a Math.max anyway.