我試圖遞歸創建一個表達式樹。每當此函數接收到其他表達式變量時,它運行完全正常。但是每當它收到一個整數(或者在這種情況下是一個將它帶到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;
}
這似乎是一個非常常見的誤解,指向傳遞給函數時指針的工作方式。如果將指針傳遞給函數,可以使用它來修改調用函數中指向的函數,則不能使用它來修改調用函數中的指針本身 。