internal double rEval(Node node)
 {
     if ((node.GetType().Equals(typeof(VariableNode))))
     {
         return (node as VariableNode).Value;
     }
     else if ((node.GetType().Equals(typeof(NumNode))))
     {
         return (node as NumNode).Value;
     }
     else if ((node.GetType().Equals(typeof(OperatorNode))))
     {
         if ((node as OperatorNode).value == "+")
             return rEval((node as OperatorNode).left) + rEval((node as OperatorNode).right);
         else if ((node as OperatorNode).value == "-")
             return rEval((node as OperatorNode).left) - rEval((node as OperatorNode).right);
         else if ((node as OperatorNode).value == "/")
             return rEval((node as OperatorNode).left) / rEval((node as OperatorNode).right);
         else if ((node as OperatorNode).value == "*")
             return rEval((node as OperatorNode).left) * rEval((node as OperatorNode).right);
         else
             return 0;
     }
     else
         return 0;
 }
 private bool Search(Node next, string varName, double varValue)
 {
     if ((next.GetType().Equals(typeof(VariableNode))) && (next as VariableNode).value == varName)
     {
         (next as VariableNode).Value = varValue;
         return true;
     }
     else if ((next.GetType().Equals(typeof(OperatorNode))))
     {
         Search((next as OperatorNode).left, varName, varValue);
         Search((next as OperatorNode).right, varName, varValue);
     }
     else
     {
         return false;
     }
     return false;
 }