二进制树以便字符串函数C++

Binary Tree in order toString function C++

本文关键字:函数 C++ 字符串 二进制      更新时间:2023-10-16

我使用这个函数已经有一段时间了,部分原因是这个赋值限制了我必须如何实现toString方法。我有一个原始方法,它创建一个结果字符串,然后将其设置为等于一个应该按顺序返回二进制树字符串的方法。我提供了以下代码:

string Expression::toString() const{
    string result = "";
    result = inOrder(root, result);
    return result;
}
string Expression::inOrder(Node* r, string x) const{
  if(r->right==NULL && r->left == NULL){
    if(r->num != NULL){
        x += "(";
        char c = r->num + '0';
        string y(1, c);
        x += y;
        x += ")";
    } else{
        x += "(";
        x += r->op;
        x += ")";
    }
    return x;
   }
  x+=inOrder(r->left, x);
  x+=r->op;
  x+=inOrder(r->right, x);
}

由于常量函数不能操作任何外部变量,我的策略是在递归辅助函数中传递一个字符串参数,该参数会在传递节点时附加节点,然后最终返回该字符串。但是,我遇到了一个"读取位置0xcccccccc的访问冲突"错误。我知道这意味着我的递归有问题,尽管我似乎无法准确定位错误。提前谢谢。

您没有考虑单个子案例。如果r->leftNULLr->rightNULL,则将访问NULL指针。

在4种可能的情况中,您只正确处理了两种情况,即(r->right==NULL && r->left == NULL)(r->right!=NULL && r->left != NULL)。也就是说,如果r->leftr->right中恰好有一个等于NULL,则程序将崩溃。