使用队列在二叉树中遍历级别顺序

时间:2017-10-05 16:53:18

标签: c++ data-structures

以下代码在运行时崩溃,但如果结构节点* 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);
    }

http://www.geeksforgeeks.org/level-order-tree-traversal/

2 个答案:

答案 0 :(得分:0)

初始化数组“a” -

int main() {
    struct node* a[10] = {NULL};

当struct node * a [10]被全局声明时,问题不会发生,因为全局变量是自动初始化的。

答案 1 :(得分:0)

您忘了初始化a

struct node* a[10]{};

所以,一旦您的队列为空,您的dequeue确实会返回nullptr