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

ops/2024/12/12 19:04:03/

目录

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.ppmy.cn/ops/141311.html

相关文章

15.Java 网络编程(网络相关概念、InetAddress、NetworkInterface、TCP 网络通信、UDP 网络通信、超时中断)

一、网络相关概念 1、网络通信 网络通信指两台设备之间通过网络实现数据传输,将数据通过网络从一台设备传输到另一台设备 java.net 包下提供了一系列的类和接口用于完成网络通信 2、网络 两台以上设备通过一定物理设备连接构成网络,根据网络的覆盖范…

分布式系统架构1:共识算法Paxos

1.背景 今天开始更新分布式的文章,工作几年后还没系统的学习分布式的内容,趁着还有时间学习沉淀的时候多输出些文章 2.为什么需要分布式共识算法 思考:现在你有一份随时变动的数据,需要确保它正确存储在网络的几台不同机器上&a…

在Ubuntu相关Linux发⾏版操作系统上进行Java项目的简单部署

目录 1.apt 2.安装JDK 3.安装MySQL 4.部署 Web 项⽬到 Linux 1.apt apt(Advanced Packaging Tool), Linux软件包管理⼯具. ⽤于在Ubuntu、Debian和相关Linux发⾏版 上安装、更新、删除和管理deb软件包. ⼤多数apt命令必须以具有sudo权限的⽤户⾝份运⾏. apt常⽤命令 …

VirtIO实现原理之数据结构与数据传输演示(3)

接前一篇文章:VirtIO实现原理之数据结构与数据传输演示(2) 本文内容参考: VirtIO实现原理——vring数据结构-CSDN博客 VirtIO实现原理——数据传输演示-CSDN博客 特此致谢! 一、数据结构总览 2. 相关数据结构 前文书介绍了《Virtual I/O Device (VIRTIO) Versi

计算机毕业设计hadoop+spark+hive图书推荐系统 豆瓣图书数据分析可视化大屏 豆瓣图书爬虫 知识图谱 图书大数据 大数据毕业设计 机器学习

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

vue3二次封装elementPlus的dialog弹窗组件

1、在components目录下新建一个弹窗.vue文件&#xff0c;我这里是demoDialog.vue。 ~template <template><div><el-dialog title"标题" v-model"visible" with"600px"><div class"dialog-content">我是弹窗&…

Java虚拟机启动时默认携带参数(jdk8)

在cmd窗口里输入 java -XX:PrintCommandLineFlags -version 输出参数如下 -XX:InitialHeapSize531771072 -XX:MaxHeapSize8508337152 -XX:PrintCommandLineFlags -XX:UseCompressedClassPointers -XX:UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:UseParalle…

网络安全法 -网络信息安全

第四章 网络信息安全 第四十条 网络运营者应当对其收集的用户信息严格保密&#xff0c;并建立健全用户信息保护制度。 第四十一条 网络运营者收集、使用个人信息&#xff0c;应当遵循合法、正当、必要的原则&#xff0c;公开收集、使用规则&#xff0c;明示收集、使用信息的…