0

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」エラーが発生しました。これは再帰に何か問題があることを意味していることはわかっていますが、エラーを特定することはできません。前もって感謝します。

4

2 に答える 2

1

あなたは一人っ子のケースを考慮していませんでした。いずれかr->leftNULLまたはr->rightである場合、ポインターNULLにアクセスします。NULL

于 2015-02-17T04:19:38.770 に答える