c - 使用队列的级别顺序二叉树遍历
问题描述
我正在尝试使用队列进行级别顺序遍历。但只打印第一个值,即 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;
}
解决方案
我认为您的队列实现背后的逻辑存在一些错误。我可以给你一些建议。
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);
}
推荐阅读
- php - Visual Studio Code PHP 验证错误:无法验证,因为 /usr/bin/php 不是有效的 php 可执行文件
- javascript - HTML CSS/JS 底部导航栏向上滑动
- sql - 计算同一用户 sql 不同操作之间的小时/天差异
- asp.net - ValidateRequest=False 可以在 asp.net webform 中有条件吗?
- python - Pandas groupby 给出任何非 nan 值
- javascript - 超过最大更新深度。当组件重复调用 setState 时,可能会发生这种情况
- kibana - Kibana 自定义图例标签
- python - 我需要一个起点来编写应用程序以将文本从 pdf 提取到 excel
- svg - 来自预加载内容的内联外部 SVG 文件
- javascript - 如何使用 php 和 ajax 从同一个切换开关触发两个不同的事件