【问题标题】:level order binary tree traversal using queue使用队列的级别顺序二叉树遍历
【发布时间】:2019-06-15 07:50:31
【问题描述】:

我正在尝试使用队列进行级别顺序遍历。但只打印第一个值,即 10。在调用 dequeue() 函数之后,仍然没有打印这些值。显然 dequeue() 函数存在一些问题。请帮忙。

所有功能都在工作。

            #include<stdio.h>
            #include<stdlib.h>
            #define max 100
            int a[max];
            int front=-1;
            int rear=-1;
            struct node
            {
                int data;
                struct node *left, *right;
            };
            struct node *newNode(int data)
            {
                struct node *nn;
                nn=(struct node *)malloc(sizeof(struct node));
                if(!nn)
                    return;
                nn->data=data;
                nn->left=nn->right=NULL;
                return nn;
            };
            void enqueue(struct node *root)
            {
                a[++rear]=root;
                front++;
            }
            struct node *dequeue()
            {
                printf("inside dequeue\n");
                struct node *temp;
                temp=a[front];
                front++;
                return temp;
            }
            int isempty(){
                return(front==-1);
            }
            void levelorder(struct node *root)
            {
                struct node *temp=NULL;
                if(!root)
                    return;
                enqueue(root);
                while(!isempty())
                {
                    temp=dequeue();
                    printf("%d\t",temp->data);
                    if(temp->left)
                        enqueue(temp->left);
                    if(temp->right)
                        enqueue(temp->right);
                }
            }
            int main()
            {
                int data;
                struct node *root=newNode(10);
                root->left = newNode(11);
                root->left->left = newNode(7);
                root->right = newNode(9);
                root->right->left = newNode(15);
                root->right->right = newNode(8);
                levelorder(root);
                return 0;
            }

【问题讨论】:

    标签: c data-structures tree queue iteration


    【解决方案1】:

    我认为你的队列实现背后的逻辑有问题。我可以给你一些建议。

            int front=0,rear=0;
    
            void enqueue(struct node *root)
            {
                a[rear]=root;
                rear++;
            }
    
            struct node *dequeue()
            {
                //handle case where queue is empty
                printf("inside dequeue\n");
                struct node *temp;
                temp=a[front];
                front++;
                return temp;
            }
    
            int isEmpty(){
                return(front==rear);
            }
    

    为了使数组的大小更可靠,您应该使用带有这样索引的模数函数。

            int front=0,rear=0;
    
            void enqueue(struct node *root)
            {
                a[rear%max]=root;
                rear++;
            }
    
            struct node *dequeue()
            {
                //handle case where queue is empty
                printf("inside dequeue\n");
                struct node *temp;
                temp=a[front%max];
                front++;
                return temp;
            }
    
            int isEmpty(){
                return(front==rear);
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多