109.【C语言】数据结构之二叉树层序遍历

news2025/1/17 21:36:31

目录

1.知识回顾

2.代码实现

准备工作

LevelOrder函数

代码框架

关键代码

3.执行结果


1.知识回顾

层序遍历参见106.【C语言】数据结构之二叉树的三种递归遍历方式文章

截取的部分内容

定义:按层的方式遍历(,设n为树的深度,h==1-->h==2-->h==3-->...-->h==n)

以下面这张图为例子

遍历顺序:1-->2-->4-->3-->5-->6

h==1为第一层,只有1;h==2为第二层,有2和4;h==3为第三层,有3,5和6;

2.代码实现

这里用的是队列,画图分析上方二叉树的层序遍历

会发现出队的顺序恰好是层序遍历的结果! (注意空节点不入队)

核心思想:先出队一个根节点,后将根的左右非空节点入队

准备工作

直接借用98.【C语言】数据结构之队列文章的队列代码,将其载入到VS的解决方案

这里需要对原代码左一点修改

Queue.h修改为

typedef struct QueueNode* QDataType;

typedef struct QueueNode
{
	struct QueueNode* next;
	QDataType data;
}QNode;

队列的每个节点是一个结构体,既存储了树的节点的地址又存储了下一个节点的地址(这样做方便操作)

LevelOrder函数

代码框架

养成良好的习惯 先写初始化和销毁

void LevelOrder(BTNode* root)
{
	Queue q;
	QueueInit(&q);
	//......
	QueueDestroy(&q);
}

关键代码

非空节点才能入队

以"知识回顾"的二叉树画图分析if (root) {QueuePush(&q,root);}后的图

	if (root)
		QueuePush(&q,root);

	while (!QueueEmpty(&q))
	{
        //先出队一个根节点
		BTNode* front = QueueFront(&q);
		QueuePop(&q);
		printf("%d ", front->data);

        //后将根的左右非空节点入队
		if (front->left)
			QueuePush(&q, front->left);
		if (front->right)
			QueuePush(&q, front->right);
	}

QueuePop是将data和next都销毁(记得销毁前先保留data数据备用打印)

可以看到QueuePop的free(pq->head);

void QueuePop(Queue* pq)
{
	assert(pq);
	assert(pq->head != NULL);

	QNode* next = pq->head->next;
	free(pq->head);
	pq->head = next;
	if (pq->head == NULL)
		pq->tail = NULL;
	pq->size--;
}

 

3.执行结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2256355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot的养老院管理系统的设计与实现

一、前言 随着人口老龄化的加剧,养老院作为老年人养老的重要场所,其管理的高效性和科学性显得尤为重要。传统的养老院管理方式多依赖人工操作,存在信息记录不及时、不准确,管理流程繁琐,资源调配困难等问题。利用信息技…

012 路由信息协议RIP

路由信息协议RIP 作为度量(Metric)来衡量到达目的网络的距离 RIP是一种基于距离矢量D-V(Distance-Vector)算法的协议,它使用跳数(Hop Count)作为度量(Metric)来衡量到达目的网络的距离。 默认情况下,路由器到与它直接相连网络的跳数为0,因此…

NLP与LLM的工程化实践与学习思考 - 说说知识图谱

NLP与LLM的工程化实践与学习思考[24年半年工作总结] - 说说知识图谱 0 真的就是先说说1 为什么知识图谱什么是知识图谱?基于图的数据结构?基于数据结构的图?知识图谱的技术要点两个技术维度:知识、图七个技术要点:表示…

ROS2 - C++工程创建和工程解析

ROS2 系列文章目录 文章目录 ROS2 系列文章目录前言1. 安装构建工具colcon1.1 简介1.2 安装colcon 2. 创建工作空间2.1 创建一个工作目录 3 创建一个C软件包4. 编写发布者节点4.1 使用wget获取一个模板4.2 代码解读4.2 添加依赖项4.3 修改CmakeLists.txt 5. 编写订阅者节点5.1 …

【5G】架构 Architecture

5G网络架构受到了多个因素的影响。首先是为云端实现做好准备,其次是应对比之前更大的数据速率和更低的时延,启用新服务的能力,以及特别是在初期阶段与长期演进(LTE)的互操作需求。所有这些因素都对5G架构产生了影响。除…

vue2+html2canvas+js PDF实现试卷导出和打印功能

1.首先安装 import html2canvas from html2canvas; import { jsPDF } from jspdf; 2.引入打印插件print.js import Print from "/assets/js/print"; Vue.use(Print) // 打印类属性、方法定义 /* eslint-disable */ const Print function (dom, options) {if (…

图像滤波和卷积的不同及MATLAB应用实例

滤波与卷积在图像处理中都是非常重要的运算,但它们有着明显的区别。以下是滤波与卷积的主要不同点,并附带一个MATLAB实例来展示两者在图像处理中的效果差异。 一、滤波与卷积的不同 定义与目的: 1)滤波:滤波是一种信…

Java集合(三)- Stack Queue

目录 一、Stack & Queue概述 1.1、Queue 1.2、Deque 二、方法剖析 2.1、addFirst() 2.2、addLast() 2.3、pollFirst() 2.4、pollLast() 2.5、peekFirst() 2.6、peekLast() 一、Stack & Queue概述 Java里有一个叫做Stack的类,却没有叫做Queue的类…

数据结构理论

内容来源青岛大学数据结构与算法课程,链接:数据结构与算法基础(青岛大学-王卓)_哔哩哔哩_bilibili 绪论 数据结构概述 数据结构和算法的定义:我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存…

008.精读《Apache Paimon Docs - Table w/o PK》

文章目录 1. 引言2. 基本概念2.1 定义2.2 使用场景 3. 流式处理3.1 自动小文件合并3.2 流式查询 4. 数据更新4.1 查询4.2 更新4.3 分桶附加表 5 总结 1. 引言 通过本文,上篇我们了解了Apache Paimon 主键表,本期我们将继续学习附加表(Append…

硬件选型规则

光源选型: 先用型号中带H的,没有的选标准的. 光源和光源控制器的搭配需要确保接口一致。 根据型号表中的最佳工作距离和相机的尺寸。 光源控制器选型: 首先选择海康风格系列光源控制器考虑与光源的接口匹配。功率应该满足接近光源功率。检查是否退市…

数据分析系列---requests的使用

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 主环境和虚拟环境 主环境是电脑上安装的python环境 虚拟环境在项目中可以实现环境的隔离,假设DemoA和DemoB分别用到了某个三方库1.0和2.0版本,那么在一个…

selenium常见接口函数使用

博客主页:花果山~程序猿-CSDN博客 文章分栏:测试_花果山~程序猿的博客-CSDN博客 关注我一起学习,一起进步,一起探索编程的无限可能吧!让我们一起努力,一起成长! 目录 1. 查找 查找方式 css_s…

深度学习之预备知识

深度学习是关于优化的学习。对一个带有参数的模型,找到其中能拟合数据最好的模型。 一、数据操作 张量:表示一个由数值组成的数组,这个数组可能有多个维度。具有一个轴的张量对应数学上的向量,具有两个轴的张量对应数学上的矩阵&…

【论文相关】期刊/会议 信息检索——IEEE各期刊投稿要求(待完善)

[吐槽] 外文期刊/会议网站的真的很难找,想要了解的信息很难检索;比如 旗下子期刊官网、子期刊具体要求不同等问题。 TIFS期刊 (IEEE Transactions on Information Forensics and Security) 期刊官网链接:https://mc.manuscriptcentral.com/…

ElementUI:el-tabs 切换之前判断是否满足条件

<div class"table-card"><div class"card-steps-class"><el-tabsv-model"activeTabsIndex":before-leave"beforeHandleTabsClick"><el-tab-pane name"1" label"基础设置"><span slot&…

入职体检心电图不合格的常见情况

心电图&#xff08;ECG&#xff09;是通过记录心脏的电活动来评估心脏健康状况的一项常见检查。它是体检中常见的检查项目之一&#xff0c;尤其对于从事需要高度体力活动的职业&#xff08;如医护、公安、消防等&#xff09;或对心脏健康有特别要求的行业&#xff0c;心电图的结…

释放 AI 潜能:掌握提问策略,让 AI 事半功倍

在这个 AI 大模型快速迭代的时代&#xff0c;人人都能免费使用 AI。然而&#xff0c;很多人却发现&#xff0c;自己与 AI 互动的效果并不理想。这并非 AI 的问题&#xff0c;而是方法不对。输入决定输出&#xff0c;只有掌握正确的提问策略&#xff0c;才能真正释放 AI 助手的生…

AI赋能:构建安全可信的智能电子档案库

在档案的政策与法规上&#xff0c;《中华人民共和国档案法》2020年修订新增&#xff0c;对电子档案的合法要件、地位和作用、安全管理要求和信息化系统建设等方面作出了明确规定&#xff0c;保障数字资源的安全保存和有效利用。 日前&#xff0c;国家档案局令第22号公布《电子…

【计算机网络】实验12:网际控制报文协议ICMP的应用

实验12 网际控制报文协议ICMP的应用 一、实验目的 验证ping命令和tracert命令的工作原理。 二、实验环境 Cisco Packet Tracer模拟器 三、实验过程 1.构建网络拓扑并进行信息标注&#xff0c;将所需要配置的IP地址写在对应的主机或者路由器旁边&#xff0c;如图1所示。 图…