递归创建一棵树

时间:2013-10-09 08:52:39

标签: c++ recursion expression-trees

我试图以递归方式创建表达式树。每当此函数接收到其他表达式变量时,它就会非常正常运行但是每当它收到一个整数(或者在这种情况下是一个将它带到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是输入文件流对象。

1 个答案:

答案 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;
}

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