我试图递归创建一个表达式树。只要此函数接收其他表达式变量,它就会运行良好。但是,只要它接收到一个整数(或者在这种情况下是将其带到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;
}


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

10-08 03:12