使用队列在二进制树中的水平顺序遍历



在运行时崩溃以下代码崩溃,但如果struct node* 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-order-tree-traversal/

初始化数组" a" -

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

当struct节点* a [10]在全球声明时,由于全局变量是自动初始化的。

都不会发生问题。

您忘记初始化a

struct node* a[10]{};

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

最新更新