我试图以递归方式创建表达式树。每当此函数接收到其他表达式变量时,它就会非常正常运行但是每当它收到一个整数(或者在这种情况下是一个将它带到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是输入文件流对象。
答案 0 :(得分:1)
很抱歉说它运行不正常,有多处错误
首先
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;
}
这似乎是对传递给函数时指针如何工作的一种非常普遍的误解。如果你传递一个指向函数的指针,你可以使用它来修改调用函数中指向的内容,你不能用它在调用中修改指针本身功能