c ++中的非递归树?

时间:2014-04-07 04:43:31

标签: c++ tree

我找到了一个用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()

1 个答案:

答案 0 :(得分:0)

没有。它会引发segmentation fault错误,因为没有NULL检查。如果nodeNULL并且您正在访问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
}

如果你真的想让这个非递归,请自己实现一个堆栈并使用这个堆栈而不是递归。