我找到了一个用c ++制作表达式树的好网站。 getValue
函数对我来说很有意义,但有没有办法让它不递归?否则它可能会产生堆栈溢出吗?
double getValue( ExpNode *node ) { // Return the value of the expression represented by // the tree to which node refers. Node must be non-NULL.
if ( node->kind == NUMBER ) { // The value of a NUMBER node is the number it holds.
return node->number;
}
else { // The kind must be OPERATOR. // Get the values of the operands and combine them
// using the operator.
double leftVal = getValue( node->left )
double rightVal = getValue( node->right );
switch ( node->op ) {
case '+': return leftVal + rightVal;
case '-': return leftVal - rightVal;
case '*': return leftVal * rightVal;
case '/': return leftVal / rightVal;
}
}
} // end getValue()
答案 0 :(得分:0)
没有。它会引发segmentation fault
错误,因为没有NULL
检查。如果node
为NULL
并且您正在访问node->kind
该怎么办?
首先检查node
是否为NULL
。然后做其余的事。
double getValue( ExpNode *node ) {
if (node==NULL)
return (double)INT_MAX; //include limits.h and don't use the value INT_MAX in any node
//rest code
}
如果你真的想让这个非递归,请自己实现一个堆栈并使用这个堆栈而不是递归。