树遍历::级别顺序树遍历使用队列。
给我一个解决方案。
级别订单树遍历
我们访问级别上的每个节点,然后再转到较低级别。此搜索称为广度优先搜索(BFS),因为在进入下一个深度之前,搜索树在每个深度上尽可能地展开。
我想在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;
}
答案 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;
}