我有一个结构,我想创建这个结构的队列。推送新元素时遇到问题。请帮助。
#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条件时也遇到了错误。请帮忙
答案 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
的成员未初始化。 left
和right
不是NULL
开头。因此,检查它们上的NULL
是没用的。
updateLevel(n,nextLevel);
什么是nextLevel
,似乎没有定义。
尝试在代码中设置一些断点并找到问题所在。错误说if condition check
有问题,但根本原因可能是其他地方。