以下代码在运行时崩溃,但如果结构节点* a [10]被全局声明,则完全正常。问题在哪里。任何见解都将受到赞赏。 谢谢!
#include<bits/stdc++.h>
using namespace std;
int rear=-1;
int front=-1;
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *newnode(int d){
struct node* node1=new node;
node1->data=d;
node1->left=NULL;
node1->right=NULL;
return(node1);
}
void enqueue(struct node* a[],struct node* tempnode){
rear++;
a[rear]=tempnode;
}
struct node* dequeue(struct node* a[]){
front++;
return a[front];
}
void bfs(struct node* root,struct node* a[]){
struct node *tempnode=root;
while(tempnode){
cout<<tempnode->data;
if(tempnode->left)
enqueue(a,tempnode->left);
if(tempnode->right)
enqueue(a,tempnode->right);
tempnode=dequeue(a);
}
}
main() {
struct node* a[10];
struct node* root=newnode(1);
root->left=newnode(2);
root->right=newnode(3);
root->left->left=newnode(-1);
root->left->right=newnode(0);
bfs(root,a);
}
答案 0 :(得分:0)
初始化数组“a” -
int main() {
struct node* a[10] = {NULL};
当struct node * a [10]被全局声明时,问题不会发生,因为全局变量是自动初始化的。
答案 1 :(得分:0)
您忘了初始化a
:
struct node* a[10]{};
所以,一旦您的队列为空,您的dequeue
确实会返回nullptr
。