public void SetValue(int goal, bool presetFormat = false)
        {
            int left, right;

            while (!SplitHelper.SplitValue(goal, Operator.ToString().ToCharArray()[0], out left, out right, presetFormat))
            {
                ;
            }
            Left.SetValue(left, presetFormat);
            Right.SetValue(right, presetFormat);
        }
        /// <summary>
        /// Instantiate a new operator node and make sure that its value is as specified
        /// and the tree rooted at this node has the specified number of operand nodes.
        /// </summary>
        /// <param name="goal"></param>
        /// <param name="numberOfNewNodes"></param>
        public OperatorNode(int goal, int numberOfNewNodes = 2)
        {
            int  left, right;
            char op;

            // Choose a random valid operator for this node and split the goal
            do
            {
                op = Tree.operators.GetRandomElement();
            } while (!SplitHelper.SplitValue(goal, op, out left, out right));

            Operator = new Operator(op);
            Left     = new OperandNode(left);
            Right    = new OperandNode(right);

            int toLeft, toRight;

            // Distribute the number of new operands to be made between the two sides
            SplitHelper.SplitNumberOfOperands(left, right, numberOfNewNodes, out toLeft, out toRight);

            Left  = Left.Expand(toLeft);
            Right = Right.Expand(toRight);
        }