我试图递归地创建一个表达式树。每当这个函数接收到其他表达式变量时,它就运行得非常好。但是,每当它接收到一个整数(或者在本例中是一个字符串,它把它带到else语句),它就会使我的程序崩溃。
void buildExpressionTree (istream &ins, BinaryNode* p)
{
string buffer;
//read in from file
while ((ins.peek()!='\n') && (ins >> buffer))
{
if(p == NULL && buffer == "*","/","+","-")
{
p = new BinaryNode(buffer, NULL, NULL);
buildExpressionTree(ins,p->left);
buildExpressionTree(ins,p->right);
}
else
{
p = new BinaryNode(buffer, NULL, NULL);
}
}
}P是树的根(传递给此函数时为null ),ins是一个输入文件流对象。
发布于 2013-10-09 09:05:10
很抱歉,它不能正常运行,有多个错误
首先
if(p == NULL && buffer == "*","/","+","-")应该是
if(buffer == "*" || buffer == "/" || buffer == "+" || buffer == "-")逗号不像你期望的那样起作用。
其次,如果您想要构建您的树,您应该从函数返回一个指针,而不是将一个指针传递到函数中。像这样
BinaryNode* buildExpressionTree (istream &ins)
{
string buffer;
//read in from file
BinaryNode* p = NULL;
while ((ins.peek()!='\n') && (ins >> buffer))
{
if(buffer == "*" || buffer == "/" || buffer == "+" || buffer == "-")
{
p = new BinaryNode(buffer, NULL, NULL);
p->left = buildExpressionTree(ins);
p->right = buildExpressionTree(ins);
}
else
{
p = new BinaryNode(buffer, NULL, NULL);
}
}
return p;
}这似乎是对指针在传递给函数时如何工作的一个非常常见的误解。如果将指针传递给函数,可以使用指针修改调用函数中所指向的内容,则不能使用它修改调用函数中的指针本身。
https://stackoverflow.com/questions/19267243
复制相似问题