二叉树的层次遍历(配图详解)

二叉树的层次遍历

  层序遍历顾名思义就是一层一层的遍历的树中的所有结点。

typedef char EmpeType

在本篇文章中,将char类型使用EmpeType

typedef char EmpeType;

创建一个结构体

typedef struct BiTNode {EmpeType data;  //数据域struct BiTNode* lchild;   //左孩子struct BiTNode* rchild;   //右孩子
}BitNode;

快速创建一个树

首先我们进行快速创建一个二叉树。

在这里插入图片描述

//快速创建一个树BiTNode* A = (BiTNode*)malloc(sizeof(BiTNode));A->data = 'A';A->lchild = NULL;A->rchild = NULL;BiTNode* B = (BiTNode*)malloc(sizeof(BiTNode));B->data = 'B';B->lchild = NULL;B->rchild = NULL;BiTNode* C = (BiTNode*)malloc(sizeof(BiTNode));C->data = 'C';C->lchild = NULL;C->rchild = NULL;BiTNode* D = (BiTNode*)malloc(sizeof(BiTNode));D->data = 'D';D->lchild = NULL;D->rchild = NULL;BiTNode* E = (BiTNode*)malloc(sizeof(BiTNode));E->data = 'E';E->lchild = NULL;E->rchild = NULL;//快速创建A,B,C,D,E5个结点A->lchild = B;A->rchild = C;B->lchild = D;B->rchild = E;

层序遍历的核心代码

使用队列来进行辅助遍历

在这里插入图片描述
  首先,遍历二叉树的第一层A先入队,遍历完第一层的时候,然后A出队,并打印A 结点。
  当A出队的时候,遍历A的左孩子,此时A的左孩子不为NULL,将左孩子B入队,然后遍历A的右孩子,此时A的右孩子不为NULL,将右孩子C入队。
在这里插入图片描述
  开始遍历第二层B结点,此时B结点已经入队,将B结点出队,并打印B结点。
  当B出队的时候,遍历B的左孩子,此时B的左孩子不为NULL,将左孩子D入队,然后遍历B的右孩子,此时B的右孩子不为NULL,将右孩子E入队。

在这里插入图片描述
  开始遍历第二层C结点,此时C结点已经入队,将C结点出队,并打印C结点。
  当C出队的时候,遍历C的左孩子,此时C的左孩子为NULL,将NULL入队,相当于没有数据入队。然后遍历C的右孩子,此时C的右孩子为NULL,将NULL入队,相当于没有数据入队。

  根据同样的道理遍历结点D,E,直到队为空,完成所有遍历。

在这里插入图片描述

核心代码

/层序遍历(存的数据)
void LevelOrder(BiTNode* T)
{//创建一个队列queue<EmpeType> q;//用于存放队头EmpeType tmp = 0;if (T == NULL)return;//入队q.push(T->data);while (!q.empty()){//取出队的头元素tmp = q.front();cout << tmp << " ";if (T->lchild != NULL){//当左孩子不为空,则入队q.push(T->lchild->data);}if (T->rchild != NULL){//当右孩子不为空,则入队q.push(T->rchild->data);}Sleep(1000);//出队if (T->lchild != NULL){T = T->lchild;}else if (T->rchild != NULL){T = T->rchild;}//弹出队头元素q.pop();}
}

源代码 队中存数据

#include<iostream>
using namespace std;
#include<queue>
#include<windows.h>typedef char EmpeType;
typedef struct BiTNode {EmpeType data;  //数据域struct BiTNode* lchild;   //左孩子struct BiTNode* rchild;   //右孩子
}BitNode;//层序遍历(存的数据)
void LevelOrder(BiTNode* T)
{//创建一个队列queue<EmpeType> q;//用于存放队头EmpeType tmp = 0;if (T == NULL)return;//入队q.push(T->data);while (!q.empty()){//取出队的头元素tmp = q.front();cout << tmp << " ";if (T->lchild != NULL){//当左孩子不为空,则入队q.push(T->lchild->data);}if (T->rchild != NULL){//当右孩子不为空,则入队q.push(T->rchild->data);}Sleep(1000);//出队if (T->lchild != NULL){T = T->lchild;}else if (T->rchild != NULL){T = T->rchild;}//弹出队头元素q.pop();}
}int main()
{//快速创建一个树BiTNode* A = (BiTNode*)malloc(sizeof(BiTNode));A->data = 'A';A->lchild = NULL;A->rchild = NULL;BiTNode* B = (BiTNode*)malloc(sizeof(BiTNode));B->data = 'B';B->lchild = NULL;B->rchild = NULL;BiTNode* C = (BiTNode*)malloc(sizeof(BiTNode));C->data = 'C';C->lchild = NULL;C->rchild = NULL;BiTNode* D = (BiTNode*)malloc(sizeof(BiTNode));D->data = 'D';D->lchild = NULL;D->rchild = NULL;BiTNode* E = (BiTNode*)malloc(sizeof(BiTNode));E->data = 'E';E->lchild = NULL;E->rchild = NULL;A->lchild = B;A->rchild = C;B->lchild = D;B->rchild = E;LevelOrder(A);return 0;
}

运行结果

在这里插入图片描述

源代码2 队中存地址

#include<iostream>
using namespace std;
#include<queue>
#include<windows.h>typedef char BitEmpeType;
typedef struct BiTNode {BitEmpeType data;struct BiTNode* lchild;struct BiTNode* rchild;
}BitNode;
typedef BiTNode* QEmpeType;//层序遍历(队中存的指针)
void LevelOrder(BiTNode* T)
{//创建一个队列queue<QEmpeType> q;//用于存放队头BitEmpeType tmp = 0;if (T == NULL)return;//入队q.push(T);while (!q.empty()){tmp = q.front()->data;//打印cout << tmp << " ";if (q.front()->lchild != NULL){q.push(q.front()->lchild);}if (q.front()->rchild != NULL){q.push(q.front()->rchild);}Sleep(1000);//出队q.pop();}
}int main()
{//快速创建一个树BiTNode* A = (BiTNode*)malloc(sizeof(BiTNode));A->data = 'A';A->lchild = NULL;A->rchild = NULL;BiTNode* B = (BiTNode*)malloc(sizeof(BiTNode));B->data = 'B';B->lchild = NULL;B->rchild = NULL;BiTNode* C = (BiTNode*)malloc(sizeof(BiTNode));C->data = 'C';C->lchild = NULL;C->rchild = NULL;BiTNode* D = (BiTNode*)malloc(sizeof(BiTNode));D->data = 'D';D->lchild = NULL;D->rchild = NULL;BiTNode* E = (BiTNode*)malloc(sizeof(BiTNode));E->data = 'E';E->lchild = NULL;E->rchild = NULL;A->lchild = B;A->rchild = C;B->lchild = D;B->rchild = E;LevelOrder(A);return 0;
}

在这里插入图片描述

觉得我回答有用的话,记得点个关注哟!谢谢支持!

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

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

相关文章

SpringCloud中的nacos注册中心分析

一、概述 服务注册中心是整个微服务架构体系中的关键组件之一&#xff0c;它负责服务的注册、发现及管理。nacos可以作为注册中心使用&#xff0c;提供了一种简化微服务架构中服务发现&#xff0c;服务注册及健康检查的功能&#xff0c;可以方便地管理微服务的实例。 二、naco…

使用docker配置CCM-SLAM

一.Docker环境配置 1.拉取Docker镜像 sudo docker pull ubuntu:18.04拉取的为ununtu18版本镜像&#xff0c;环境十分干净&#xff0c;可以通过以下命令查看容器列表 sudo docker images 如果想删除多余的docker image&#xff0c;可以使用指令 sudo docker rmi -f <id&g…

微服务设计模式:构建现代分布式系统的蓝图

引言 随着软件开发的进步和需求的变化&#xff0c;微服务架构逐渐崭露头角&#xff0c;成为当今分布式系统设计的主流方式。这种架构方式的兴起并非偶然&#xff0c;它为企业提供了构建灵活、可扩展且高效的应用程序的方法。在这篇博客中&#xff0c;我们将深入探讨微服务架构…

“开关是灯的日出日落,日出日落是灯的开关”

C语言刷题 day01 本篇是C语言刷题大杂烩&#xff0c;收集了笔者遇到的认为有价值的题目&#xff0c;本篇会持续更新~~ day01 至少是其他数字两倍的最大数 题目原文&#xff1a; 题意解析&#xff1a; 请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 …

符文协议的演变历程:从挑战到创新

在比特币网络长期面临的挑战中&#xff0c;与主流去中心化金融功能的兼容性一直是一大难题。相比之下&#xff0c;以太坊通过ERC-721和ERC-1155代币标准&#xff0c;为NFT和去中心化金融应用提供了支持&#xff0c;而比特币的应用范围却相对有限。然而&#xff0c;近年来&#…

蓝桥杯2024年第十五届省赛真题-爬山

贪心优先队列的题&#xff0c;贪心会漏一个情况&#xff0c;不知道怎么处理&#xff0c;这里直接打表了 2 1 1 48 49 答案是30&#xff0c;贪心是31 专有名词&#xff1a;hack-有新的测试点过不了 #include<bits/stdc.h> using namespace std; #define endl \n #define …

Jellyfin插件手动导入步骤

1、进入文件夹 cd /volume1/appdata/Jellyfin/data 2、备份原文件夹 cp -r plugins/ /volume1/Download/plugins 3、复制插件 cp -r /volume1/Download/plugins/ ./ 4、赋予权限 chmod 777 -R plugins/

取模学习之Image2Lcd

使用软件Image2Lcd V0.4 1.&#xff1a;打开图片&#xff0c;图片格式可选如下图&#xff0c;本文使用的.jpg格式 转换后数组例子&#xff08;数组头数据占前8字节&#xff09;&#xff1a; 2.&#xff1a;扫描模式 由第1个字节低四位配置 &#xff08;1&#xff09;水平扫描 …

动手学深度学习11 权重衰退

动手学深度学习11 权重衰退 1. 权重衰退2. 代码实现3. QA 视频&#xff1a; https://www.bilibili.com/video/BV1UK4y1o7dy/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 电子书&#xff1a; ttps://zh-v2.d2l.ai/chapter_multilayer-perceptrons/wei…

【MySQL 数据宝典】【内存结构】- 004 自适应哈希索引

自适应哈希索引 https://developer.aliyun.com/article/1230086 什么是自适应哈希索引&#xff1f; 自适应哈希索引是MySQL InnoDB存储引擎中的一种索引结构&#xff0c;用于加速查询。它根据查询模式和数据分布动态地调整自身的大小&#xff0c;以提高性能。 上图就是通过…

Redis中的订阅发布和事务(一)

订阅发布 PUBSUB NUMSUB PUBSUB NUMSUB [channel-1 channel-2… channel-n]子命令接受任意多个频道作为输入参数&#xff0c;并返回这些频道的订阅者数量。 这个子命令是通过pubsub_channels字典中找到频道对应的订阅者链表&#xff0c;然后返回订阅者链表的长度来实现的(订阅…

Nuclei 减少漏报的使用小技巧

在最近工作的渗透测试项目中发现Nuclei存在一个问题&#xff0c;就是相同的网站连续扫描多次会出现漏报的情况&#xff0c;此前没有注意过这个情况&#xff0c;所以写篇文章记录一下。 在此之前我的常用命令都是一把梭&#xff0c;有就有没有就继续其他测试 $ nuclei -u htt…

代码随想录算法训练营第四十五天| 70. 爬楼梯 (进阶),322. 零钱兑换 ,279.完全平方数

题目与题解 70. 爬楼梯 &#xff08;进阶&#xff09; 题目链接&#xff1a;70. 爬楼梯 &#xff08;进阶&#xff09; 代码随想录题解&#xff1a;70. 爬楼梯 &#xff08;进阶&#xff09; 解题思路&#xff1a; 这道题要求每次可以爬1-m层的楼梯&#xff0c;最终爬到n&…

微服务架构中的业务数据可视化设计

目录 1.概要设计 1.1明确可视化目标 1.2数据整合与标准化 1.3选择合适的数据可视化工具 1.4设计可视化界面 1.5 实时更新与优化 2.技术实现 2.1数据采集与整合 2.2数据处理与转换 2.3数据存储 2.4 数据可视化 2.5 实时数据更新 2.6 安全性与权限控制 2.7 监控与日…

【ZZULIOJ】1072: 青蛙爬井(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy 提示 code 题目描述 有一口深度为high米的水井&#xff0c;井底有一只青蛙&#xff0c;它每天白天能够沿井壁向上爬up米&#xff0c;夜里则顺井壁向下滑down米&#xff0c;若青蛙从某个早晨开始向外爬&#xff0c…

患者关系管理系统功能详解

脉购健康管理系统&#xff08;软件&#xff09;包含&#xff1a;客户开卡、健康档案、问卷调查、问诊表、自动设置标签、自动随访、健康干预、健康调养、历年指标趋势分析、疾病风险评估、饮食/运动/心理健康建议、同步检查报告数据、随访记录、随访电话录音、健康阶段总结、打…

Java - 阿里巴巴命名规范

文章目录 前言一、编程规约(一) 命名风格(二) 常量定义(三) 代码格式(四) OOP 规约(五) 日期时间(六) 集合处理(七) 并发处理(八) 控制语句(九) 注释规约(十) 前后端规约(十一) 其他 二、异常日志(一) 错误码(二) 异常处理(三) 日志规约 三、单元测试四、安全规约五、MySQL 数据…

2024面试软件测试,常见的面试题(上)

一、综合素质 1、自我介绍 面试官您好&#xff0c;我叫XXX&#xff0c;一直从事车载软件测试&#xff0c;负责最多的是中控方面。 以下是我的一些优势&#xff1a; 车载的测试流程我是熟练掌握的&#xff0c;且能够独立编写测试用例。 平时BUG提交会使用到Jira&#xff0c;类似…

postgis源码编译安装-实操成功

依赖环境安装 sqlite3安装 https://www.sqlite.org/2024/sqlite-autoconf-3450200.tar.gz tar xvf sqlite-autoconf-3450200.tar cd sqlite-autoconf-3450200 mkdir -p /home/postgres/app/postgis/sqlite3 ./configure --prefix=/home/postgres/app/postgis/sqlite3 ma…

电缆检测仪的正确使用方法有哪些步骤?

电缆检测仪的正确使用方法是&#xff1a;首先&#xff0c;确保检测仪电源充足&#xff0c;设备完好无损&#xff1b;其次&#xff0c;根据电缆类型和故障类型选择合适的测试模式和参数&#xff1b;接着&#xff0c;将检测仪与电缆正确连接&#xff0c;确保接触良好&#xff1b;…