使用队列进行二进制树级别订单遍历

时间:2017-08-12 21:21:07

标签: data-structures tree queue traversal

树遍历::级别顺序树遍历使用队列。

给我一个解决方案。

  

级别订单树遍历

     

我们访问级别上的每个节点,然后再转到较低级别。此搜索称为广度优先搜索(BFS),因为在进入下一个深度之前,搜索树在每个深度上尽可能地展开。

Tree Traversal

我想在Level Order中的二叉树中遍历,或者你可以说 BFS 但我想用队列

来做

提前感谢您的帮助。

树形结构::

      1
     / \
   2     3
  / \
 4   5

输出将像::

1 2 3 4 5

#include<stdio.h>
#include<stdlib.h>
struct node
{
    int data;
    struct node* left;
    struct node* right;
};

struct queue
{
    struct node* info;
    struct queue* next;
};

struct node* NewNode(int data)
{
    struct node* root=(struct node*)malloc(sizeof(struct node));
    root->left=NULL;
    root->right=NULL;
    root->data=data;
    return root;
}


void enqueue(struct queue** que,struct node* newnode)
{
    struct queue* qnode = (struct queue*)malloc(sizeof(struct queue));
    struct queue* temp=*que;
    qnode->info=newnode;
    qnode->next=NULL;
    if(*que==NULL)
    {
        *que=qnode;
        return;
    }
    while(temp!=NULL)
        temp=temp->next;
    temp->next=qnode;
}
struct node* dequeue(struct queue** que)
{
    if(que!=NULL){
        struct node* a=*que->info;
        *que=*que->next;
        return a;
    }
    return NULL;
}



void levelorder(struct node* root)
{

    struct queue* que=(struct queue*)malloc(sizeof(struct queue));
    struct node* temp=root;
    while(temp)
    {
        printf("%d\t",temp->data);
        if(temp->left)
            enqueue(&que,temp->left);
        if(temp->right)
            enqueue(&que,temp->right);
        temp=dequeue(&que);
    }
}
int main()
{
    struct node* root=NewNode(1);
    root->left             = NewNode(2);
    root->right           = NewNode(3);
    root->left->left     = NewNode(4);
    root->left->right   = NewNode(5);

    levelorder(root);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

使用队列的二进制树级别顺序遍历

我在这里声明了一个类型结构的队列。这是代码::

#include<stdio.h>
#include<stdlib.h>
struct Node
{
    int data;
    struct Node* left;
    struct Node* right;
};
struct Node* newnode(int data)
{
    struct Node* root=(struct Node*)malloc(sizeof(struct Node));
    root->left=NULL;
    root->right=NULL;
    root->data=data;
    return root;
}
struct Node* queue[100];
int rear=0;
int front=-1;
void enqueue(struct Node* node)
{
    queue[rear++]=node;
}
struct Node* dequeue()
{
    return queue[++front];
}
void levelOrder(struct Node* root)
{
    struct Node* temp=root;
    while(temp)
    {
        printf("%d\t",temp->data);
        if(temp->left)
            enqueue(temp->left);
        if(temp->right)
            enqueue(temp->right);
        temp=dequeue();
    }
}
int main()
{
    struct Node* root   =    newnode(2);
    root->left          =    newnode(3);
    root->right         =    newnode(4);
    root->left->left    =    newnode(7);
    root->left->left->left = newnode(1);

    levelOrder(root);
    return 0;
}