gpt4 book ai didi

c++ - 递归创建树

转载 作者:行者123 更新时间:2023-11-28 07:22:05 25 4
gpt4 key购买 nike

我正在尝试递归地创建一个表达式树。每当这个函数接收到其他表达式变量时,它就运行得很好。但是每当它收到一个整数(或者在本例中是一个将它带到 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 是树的根(传递给此函数时为空),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;
}

这似乎是对指针在传递给函数时如何工作的一个非常普遍的误解。如果您传递一个指向函数的指针,您可以使用它来修改调用函数中指向的内容,但不能使用它来修改调用函数中的指针本身功能。

关于c++ - 递归创建树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19267243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com