【二叉树】层序遍历

 目录

层序遍历概念&结构 

层序遍历的实现

整体思路

代码实现

图示理解

BT升级

整体思路

代码实现

图示理解​

应用

题目


前序&中序&后序遍历:深度优先遍历dfs

层序遍历:广度优先遍历bfs

层序遍历概念&结构 

层序遍历:除了先序遍历、中序遍历、后序遍历外,还可以对二叉树进行层序遍历。

设二叉树的根节点所在 层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。

层序遍历的实现

层序遍历用队列实现,需要把队列的代码拷贝到多文件项目里面:单链表实现【队列】_单链表队列出队-CSDN博客

整体思路

  • 把根节点放入队列
  • 保存根节点在tmp,打印根节点(遍历),然后把根节点的左右孩子入队列
  • 根节点出队列
  • 循环上诉过程(父亲出的时候就带入父亲的左右孩子)
  • 若为NULL则不入队列
  • 达到一层一层遍历(层序遍历)

    注意

  • tmp保存的是树节点的地址

  • 销毁的是队列的头节点(里面也是树节点的地址)

  • 不会销毁树的节点

代码实现

测试代码在前面博文有:链式二叉树(1)-CSDN博客

//层序遍历
void LevelOrder(BTNode* root)
{Queue pq;QueueInit(&pq);if(root)QueuePush(&pq, root);while (!QueueEmpty(&pq)){BTNode* tmp = QueueFront(&pq);//队列头的元素QueuePop(&pq);//出元素到队头printf("%d ", tmp->data);if(tmp->left)QueuePush(&pq, tmp->left);if(tmp->right)QueuePush(&pq, tmp->right);}QueueDestroy(&pq);
}int main()
{BTNode* root = CreatBinaryTree();LevelOrder(root);BinaryTreeDestory(root);root = NULL;return 0;
}

图示理解

BT升级

若我们想要一层一层打印,怎样去一层一层打印? 

整体思路

  • 设置一个变量LeveSize记录每层的个数
  • 每一层的数据个数,控制一层一层数据出队列
  • 换行打印

代码实现

//BT升级换行打印
//层序遍历
void LevelOrder(BTNode* root)
{Queue pq;QueueInit(&pq);if (root)QueuePush(&pq, root);int levesize = 1;while (!QueueEmpty(&pq)){while (levesize--){BTNode* tmp = QueueFront(&pq);//队列头的元素QueuePop(&pq);//出元素到队头printf("%d ", tmp->data);if (tmp->left)QueuePush(&pq, tmp->left);if (tmp->right)QueuePush(&pq, tmp->right);}printf("\n");levesize = QueueSize(&pq);//队列里面的元素个数}QueueDestroy(&pq);
}int main()
{BTNode* root = CreatBinaryTree();LevelOrder(root);BinaryTreeDestory(root);root = NULL;return 0;
}

图示理解

应用

大家可以思考扫雷用递归去实现?QQ加好友的好友?

  • 展开形式:广度优先遍历
  • 展开形式:深度优先遍历
  • 八度递归
  • 层序遍历:加好友的好友(搜索算法)>>>>后面的算法篇章我们会介绍

题目

练习:请写出下面的前序/中序/后序/层序遍历

1.某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为( )
A ABDHECFG
B ABCDEFGH
C HDBEAFCG
D HDEBFGCA
2.二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG.则二叉树根结点为()
A E
B F
C G
D H
3.设一课二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树前序遍历序列为____。
A adbce
B decab
C debac
D abcde
4.某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出(同一层从左到右)的序列为
A FEDCBA
B CBAFED
C DEFCBA
D ABCDEF

答案:AADA

🙂感谢大家的阅读,若有错误和不足,欢迎指正。大家新年快乐!!

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

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

相关文章

Stata实证命令代码汇总

Stata代码命令汇总 数据内容:包括数据导入和管理、数据的处理、描述性统计、相关性分析、实证模型、内生性解决、检验分析、结果导出 具体如下: 一、数据导入和管理:数据导入、数据导出 二、数据的处理:生成新变量、格式转换、…

【linux系统体验】-archlinux简易折腾

archlinux 一、系统安装二、系统配置及美化2.1 中文输入法2.2 安装virtualbox增强工具2.3 终端美化2.4 桌面面板美化 三、常用命令 一、系统安装 安装步骤人们已经总结了很多很全: Arch Linux图文安装教程 大体步骤: 磁盘分区安装 Linux内核配置系统(…

服务器解析漏洞及任意文件下载

1.服务器文件解析漏洞 文件解析漏洞,是指Web容器(Apache、nginx、iis等)在解析文件时出现了漏洞,以其他格式执行出脚本格式的效果。从而,黑客可以利用该漏洞实现非法文件的解析。 (1) Apache linux系统中的apache的php配置文件在/etc/apac…

机器学习9-随机森林

随机森林(Random Forest)是一种集成学习方法,用于改善单一决策树的性能,通过在数据集上构建多个决策树并组合它们的预测结果。它属于一种被称为“集成学习”或“集成学习器”的机器学习范畴。 以下是随机森林的主要特点和原理&…

30s学会RecyclerView创建动态列表

详细学习请参考官网 使用 RecyclerView 创建动态列表 | Android 开发者 | Android Developers (google.cn) 1.RecyclerView定义及其构造 少废话,就是一个视图控件,就像你刷小红书,东一块西一块很丝滑地滑动 就是 RecyclerView 如下图&a…

无心剑中译狄金森《你无法扑灭一场火》

You Cannot Put a Fire Out — 你无法扑灭一场火 Emily Dickinson 艾米莉狄金森 You cannot put a Fire out — A Thing that can ignite Can go, itself, without a Fan — Upon the slowest Night — 你无法扑灭一场火 一种东西,无需风扇 能在最舒缓悠长的夜…

go 语言爬虫库goquery介绍

文章目录 爬虫介绍goquery介绍利用NewDocumentFromReader方法获取主页信息Document介绍通过查询获取文章信息css选择器介绍goquery中的选择器获取主页中的文章链接 爬取总结 爬虫介绍 爬虫,又称网页抓取、网络蜘蛛或网络爬虫,是一种自动浏览互联网并从网…

leetcode(矩阵)74. 搜索二维矩阵(C++详细解释)DAY7

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中…

【计算几何】给定一组点的多边形面积

目录 一、说明二、有序顶点集三、无序顶点集3.1 凸多边形3.2 非凸多边形 四、结论 ​ 一、说明 计算多边形面积的方法有很多种。众所周知的多边形(如三角形、矩形、正方形、梯形等)的面积可以使用简单的数学公式计算。在这篇文章中,我将讨论…

Mysql Day04

mysql体系结构 连接层服务层引擎层(索引)存储层 存储引擎 存储引擎是基于表建立的,默认是innoDB show create table tb; 查看当前数据库支持的存储引擎 show engines; InnoDB 特点 DML(数据增删改)遵循ACID模…

重温阿里云宝塔面板部署前后端项目

首先祝大家新年快乐啊! 回到老家,便打算趁这一段空闲时间提升一下自己,重点是学习实践一下echarts相关内容,很多公司项目都需要实现可视化,所以在bilibili上找了黑马的一个教程开始学习,不同的是&#xff…

【CTFshow】VIP题目限免 通关

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…