public void S(string partOfstring)
 {
     if (String.IsNullOrWhiteSpace(partOfstring))
     {
         throw new EmptyMemberException();
     }
     try
     {
         int sk = 0;
         for (int i = partOfstring.Length - 1; i >= 0; i--)
         {
             if (partOfstring[i] == '(')
             {
                 sk++;
                 continue;
             }
             if (partOfstring[i] == ')')
             {
                 sk--;
                 continue;
             }
             if ((partOfstring[i] == '+' || partOfstring[i] == '-' && i != 0) && sk == 0)
             {
                 Value = partOfstring[i].ToString();
                 Type  = NodeType.PlusMinus;
                 Left  = new ElementOfTree();
                 Left.S(partOfstring.Substring(0, i));
                 Right = new ElementOfTree();
                 Right.T(partOfstring.Substring(i + 1));
                 return;
             }
         }
         if (partOfstring[0] == '-')
         {
             Value = partOfstring[0].ToString();
             Type  = NodeType.MinusU;
             Left  = new ElementOfTree();
             Left.T(partOfstring.Substring(1, partOfstring.Length - 1));
             return;
         }
         T(partOfstring);
     }
     catch (ExpressionException e)
     {
         e.Node = GetNormalNodeState(partOfstring);
         throw;
     }
 }
        private void T(string partOfString)
        {
            if (String.IsNullOrWhiteSpace(partOfString))
            {
                throw new EmptyMemberException();
            }
            try
            {
                int sk       = 0;
                int divide   = -1;
                int multiply = -1;
                int degree   = -1;
                for (int i = partOfString.Length - 1; i >= 0; i--)
                {
                    if (partOfString[i] == '(')
                    {
                        sk++;
                    }
                    else
                    if (partOfString[i] == ')')
                    {
                        sk--;
                    }
                    else
                    if (sk == 0)
                    {
                        if (partOfString[i] == '/' && divide == -1)
                        {
                            divide = i;
                        }
                        else
                        if (partOfString[i] == '*' && multiply == -1)
                        {
                            multiply = i;
                        }
                        else
                        if (partOfString[i] == '^' && degree == -1)
                        {
                            degree = i;
                        }
                    }
                }

                if (divide != -1)
                {
                    Value = partOfString[divide].ToString();
                    Type  = NodeType.Divide;
                    Left  = new ElementOfTree();
                    Left.T(partOfString.Substring(0, divide));
                    Right = new ElementOfTree();
                    Right.T(partOfString.Substring(divide + 1));
                    return;
                }
                if (multiply != -1)
                {
                    Value = partOfString[multiply].ToString();
                    Type  = NodeType.Multiply;
                    Left  = new ElementOfTree();
                    Left.T(partOfString.Substring(0, multiply));
                    Right = new ElementOfTree();
                    Right.T(partOfString.Substring(multiply + 1));
                    return;
                }
                if (degree != -1)
                {
                    Value = partOfString[degree].ToString();
                    Type  = NodeType.Degree;
                    Left  = new ElementOfTree();
                    Left.T(partOfString.Substring(0, degree));
                    Right = new ElementOfTree();
                    Right.Z(partOfString.Substring(degree + 1));
                    return;
                }
                M(partOfString);
            }
            catch (ExpressionException e)
            {
                e.Node = GetNormalNodeState(partOfString);
                throw;
            }
        }