簡體   English   中英

使用隊列在二叉樹中進行級別順序遍歷

[英]level order traversal in a binary tree using queue

下面的代碼在運行時崩潰,但是如果全局聲明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-tree-traversal/

初始化數組“ a”-

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

全局聲明結構節點* a [10]時不會發生此問題,因為全局變量是自動初始化的。

你忘了初始化a

struct node* a[10]{};

因此,一旦隊列為空, dequeue確實會返回nullptr

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM