将Struct对象推入队列时出现问题

时间:2013-04-20 05:03:39

标签: c++

我有一个结构,我想创建这个结构的队列。推送新元素时遇到问题。请帮助。

#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条件时也遇到了错误。请帮忙

1 个答案:

答案 0 :(得分: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

您可能有其他错误,但是根据您显示的代码,这至少是其中之一。

编辑:根据您更新的代码。

Node rootTree;

您未在Node中定义任何构造函数,因此rootTree的成员未初始化。 leftright不是NULL开头。因此,检查它们上的NULL是没用的。

updateLevel(n,nextLevel);

什么是nextLevel,似乎没有定义。

尝试在代码中设置一些断点并找到问题所在。错误说if condition check有问题,但根本原因可能是其他地方。