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;

}

我从 main 调用这个函数。在检查关于 NULL 的 if 条件时,我也遇到了错误。请帮忙

4

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

您可能还有其他错误,但从您显示的代码来看,这至少是其中之一。

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

Node rootTree;

你没有在你的 中定义任何构造函数Node,所以成员rootTree没有被初始化。leftright没有NULL开始。因此,您检查NULL它们是没有用的。

updateLevel(n,nextLevel);

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

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

于 2013-04-20T05:06:38.743 回答