我试图递归创建一个表达式树。只要此函数接收其他表达式变量,它就会运行良好。但是,只要它接收到一个整数(或者在这种情况下是将其带到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是输入文件流对象。
最佳答案
不好意思说,它运行不正常,有多个错误
首先
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;
}
对于指针在传递给函数时的工作方式,这似乎是一个非常普遍的误解。如果将指针传递给函数,则可以使用它来修改调用函数中所指向的内容,而不能使用它来修改调用函数中的指针本身。