0

構造体があり、この構造体のキューを作成したいと考えています。新しい要素のプッシュに問題があります。助けてください。

#include <iostream>
#include <queue>
#include <deque>
#include <list>
using namespace std;

struct Node {
Node *left, *right;
int key;
};

queue<Node> q;

void updateLevel( Node &n, int &level){
if(n.left!=NULL && n.right!=NULL){
    level+=2;
    q.push(n.left);
    q.push(n.right);
    }
    else if(n.left!=NULL || n.right!=NULL){
    level++;
    if(n.left!=NULL) q.push(n.left);
    if(n.right!=NULL) q.push(n.right);
}
};
void printTree(Node root){
//if(root!=NULL){
    q.push(root);
    Node n;
    while(!q.empty()){
        n =q.pop();
        updateLevel(n,nextLevel);
        curLevel--;
        cout<<n.key;
        if(curLevel<=0){
            cout<<endl;
            curLevel=nextLevel;
            nextLevel=0;
        }

    }

//}
    };

   int main() {

Node rootTree;

printTree(rootTree);

return 0;

}

この関数をメインから呼び出しています。NULL に関する if 条件のチェックインでもエラーが発生しました。助けてください

4

1 に答える 1

1

ここに少なくとも 1 つのエラーがあります。

queue<Node> q; //a queue of Node

でも:

q.push(n.left);
q.push(n.right); //n.left and n.right are Node*. 

Node*をキューにプッシュしていますNode

他のエラーがあるかもしれませんが、表示されたコードから、これは少なくともそのうちの 1 つです。

編集:更新されたコードに基づいています。

Node rootTree;

でコンストラクターを定義していないためNode、 のメンバーはrootTree初期化されません。leftそして始めるべきでrightはありませんNULL。したがって、それらをチェックしても意味がありませんNULL

updateLevel(n,nextLevel);

nextLevel定義されていないようです。

コードにいくつかのブレークポイントを設定して、問題を見つけてみてください。エラーif condition checkには問題があると表示されますが、根本的な原因が別の場所にある可能性があります。

于 2013-04-20T05:06:38.743 に答える