【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

news2024/11/25 15:26:19

在这里插入图片描述

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤
📃个人主页 :阿然成长日记 👈点击可跳转
📆 个人专栏: 🔹数据结构与算法🔹C语言进阶
🚩 不能则学,不知则问,耻于问人,决无长进
🍭 🍯 🍎 🍏 🍊 🍋 🍒 🍇 🍉 🍓 🍑 🍈 🍌 🍐 🍍

文章目录

  • 一、二叉树的深度优先遍历
    • 🌺1.前序遍历
      • (1)`先序遍历`的过程:
      • (2)流程图:
      • (3)代码:
      • (4)测试结果:
    • 🌼2.中序遍历
      • (1)`中序遍历`的过程:
      • (2)代码:
      • (3)测试结果:
    • 🌻3.后序遍历
      • (1) `后序遍历`的过程:
      • (2)代码:
      • (3)测试结果:
  • 二、【广度优先】层序遍历
    • 1.思路及过程:
    • 2.代码
    • 3.测试结果

一、二叉树的深度优先遍历

🌺1.前序遍历

(1)先序遍历的过程:

1.先访问当前节点(即根节点)

2.遍历当前节点的左节点,再同样遍历左子树中的节点

3.遍历完当前节点的左子树后,再去遍历当前节点的右子树,再遍历右子树中的节点

总结先访问根节点,然后遍历左子树,最后遍历右子树;即根左右

(2)流程图:

在这里插入图片描述

(3)代码:

// 二叉树前序遍历 
void BinaryTreePrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	printf("%d ", root->_data);
	BinaryTreePrevOrder(root->_left);
	BinaryTreePrevOrder(root->_right);
}

(4)测试结果:

1->2->3->NULL->NULL->NULL->4->5->NULL->NULL->6->NULL->NULL

在这里插入图片描述

🌼2.中序遍历

(1)中序遍历的过程:

1.先进入当前节点的左子树,以同样的步骤遍历左子树的节点

2.访问当前节点

3.最后进入到当前节点的右子树,以同样的步骤遍历右子树中的节点

总结先遍历左子树,再访问根节点,最后遍历右子树,即 左根右

(2)代码:


// 二叉树中序遍历
void BinaryTreeInOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	BinaryTreePrevOrder(root->_left);
	printf("%d ", root->_data);
	BinaryTreePrevOrder(root->_right);
}

(3)测试结果:

NULL->3->NULL->2->NULL->1->NULL->5->4->NULL->6->NULL

在这里插入图片描述

🌻3.后序遍历

(1) 后序遍历的过程:

1.先进入当前节点的左子树,以同样的步骤遍历左子树中的节点

2.再进入当前节点的右子树,以同样的步骤去遍历右子树中的节点

3.最后遍历此左子树和右子树的父亲节点,也就是该节点

总结先遍历左子树,再遍历右子树,最后访问根节点,即左右根

(2)代码:

// 二叉树后序遍历
void BinaryTreePostOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}
	BinaryTreePrevOrder(root->_left);
	BinaryTreePrevOrder(root->_right);
	printf("%d ", root->_data);
}

(3)测试结果:

NULL->NULL->3->NULL->2->NULL->NULL->5->NULL->NULL->6->4->1
在这里插入图片描述

二、【广度优先】层序遍历

1.思路及过程:

构建一颗二叉树
在这里插入图片描述
1.将root节点1放入队列。
在这里插入图片描述
2.取队列首元素1,并将节点1左右孩子入队
在这里插入图片描述
3.队首元素出队列
在这里插入图片描述
4.取队列首元素2,并将节点2左右孩子入队,由于只有左孩子,所以只用入队一个元素。
在这里插入图片描述
5.队首元素出队列
在这里插入图片描述
6.取队列首元素4,并将节点4左右孩子入队。
在这里插入图片描述
7.队首元素出队列
在这里插入图片描述
8.取队列首元素3,并将节点3左右孩子入队。但是,元素3左右孩子为NULL,因此不用入队。直接执行出队列操作。
在这里插入图片描述
9.取队列首元素5,并将节点5左右孩子入队。但是,元素5左右孩子为NULL,因此不用入队。直接执行出队列操作.
在这里插入图片描述

10.取队列首元素6,并将节点6左右孩子入队。但是,元素6左右孩子为NULL,因此不用入队。直接执行出队列操作。
在这里插入图片描述
11.到此,队列元素已全部出队,层序遍历完成!
结果为:
在这里插入图片描述

2.代码

// 层序遍历
void BinaryTreeLevelOrder(BTNode* root)
{
	Que q;
	QueueInit(&q);

	if (root)
		QueuePush(&q,root);
	while (!QueueEmpty(&q))
	{
		BTNode* tmp = QueueFront(&q);
		printf("%d ", tmp->_data);
		if (tmp->_left)
		{
			QueuePush(&q,tmp->_left);
		}
		if (tmp->_right)
		{
			QueuePush(&q, tmp->_right);
		}
		QueuePop(&q);
	}
	printf("\n");
	QueueDestroy(&q);
}

3.测试结果

在这里插入图片描述

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

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

相关文章

2023最新Nmap安装和使用详解,超详细教程

【点击文章末尾卡片,先领资料再阅读哦~】👇 文章目录 【点击文章末尾卡片,先领资料再阅读哦~】👇 Nmap概述功能概述运行方式 Nmap安装Nmap参数详解目标说明主机发现端口扫描端口说明和扫描顺序服务与版本探测脚本扫描操作系统探测…

C++输入流和输出流介绍

C 又可以称为“带类的 C”,即可以理解为 C 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scan…

DAZ To UMA⭐二.设置DAZ导出的变形内容 和 获取模型纹理贴图位置

文章目录 🟩 设置DAZ导出的内容1️⃣ 找到要导出的参数名称2️⃣ 打开导出面板3️⃣ 设置导出规则举例 : 导出身体Assets🟦 获取模型纹理贴图🟩 设置DAZ导出的内容 设置参数有两个目的: DAZ可以进行模型的参数调整,例如胖瘦等等,那如何将这些调整后的数值一起导出到FBX中…

Window通过VMWare搭建Linux集群后,将虚拟机暴露到宿主机局域网中,实现个人服务器搭建

目录 一、目的二、实现的方法 2.1 保证VMnet8为NAT模式2.2 获取虚拟机IP后,与宿主机进行端口绑定2.3 查看宿主机端口配置是否生效2.4 宿主机的端口准入规则设置2.5 效果 一、目的 解决宿主机通过VMware WorkStation安装了虚拟机后,宿主机所在的局域网…

A股风格因子看板 (2023.09 第07期)

该因子看板跟踪A股风格因子,该因子主要解释沪深两市的市场收益、刻画市场风格趋势的系列风格因子,用以分析市场风格切换、组合风格景露等。 今日为该因子跟踪第7期,指数组合数据截止日2023-08-31,要点如下 近1年A股风格因子收益走…

开源日报 0821:帮你修复老旧照片

这篇文章总结了几个开源项目的特点和优势。其中包括了 Python 资源列表、金融研究工具、动画精灵程序、游戏和旧照片修复项目等。这些项目提供了丰富的功能和技术支持,用户可以根据自己的需求进行定制和改进。总的来说,这些开源项目为开发者和用户提供了…

在如今内卷严重的背景下,程序员该如何提高自己的收入,享受美好人生?

无论是当今程序员行业,还是各行各业,内卷都非常严重,好多人都处于了一种卷又卷不过,躺又躺不平的境地,十分的难受,那么作为一个程序员而言,该如何在这样的境地下提高自己的收入,享受…

动力节点老杜JavaWeb笔记(全)

Servlet 关于系统架构 系统架构包括什么形式? C/S架构B/S架构 C/S架构? Client / Server(客户端 / 服务器)C/S架构的软件或者说系统有哪些呢? QQ(先去腾讯官网下载一个QQ软件,几十MB&#xff…

Innodb底层原理与Mysql日志机制

MySQL内部组件结构 Server层 主要包括连接器、词法分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现&#xff0c…

1536. 排布二进制网格的最少交换次数;754. 到达终点数字;1106. 解析布尔表达式

1536. 排布二进制网格的最少交换次数 核心思想:贪心。枚举每一行,然后去找离这行最近的满足要求的那一行。我们用j保存每一行的最后一个1,那么尾部的0个数为n-1-j,每一行需要的0个数为n-i-1,所以得出结论 i > j。然…

asp.net网站的建立及运行

点击创建新项目 在输入框中输入asp.net,并选择图中的 点击下一步 点击创建 然后,右键,添加,新建项 选择web窗体 点击添加 点击视图,工具箱 选择一个label,记住这个id 空白处右键,查看代码 添…

usmile F10 系列数字牙刷:数字化刷牙体验的新巅峰

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂&#x1f996…

51单片机4【玩转开发板】

1.开发板完全介绍 1.配件 2.开发板主板及板载原件 1.单片机 (1)注意不要装反了,凹槽的一面向上是正的 (2)不要再开电的时候取下或者装上。 2.单片机工作必备的外围电路 1.晶振 2.复位电路 3.电源供电电路 4.USB下载…

NLP文本生成全解析:从传统方法到预训练完整介绍

目录 1. 引言1.1 文本生成的定义和作用1.2 自然语言处理技术在文本生成领域的使用 2 传统方法 - 基于统计的方法2.1.1 N-gram模型2.1.2 平滑技术 3. 传统方法 - 基于模板的生成3.1 定义与特点3.2 动态模板 4. 神经网络方法 - 长短时记忆网络(LSTM)LSTM的核心概念PyTorch中的LST…

漫画 | 两年,我学会了所有的编程语言!

本文想要探讨的一个话题是:作为一个程序员,如何看待这么多的编程语言?是不是要学习?该怎么学习?其实很多人都有这样的体会,当你学会了一门语言以后,再去学习新的语言,难度会大大降低…

音乐随行,公网畅享,群辉Audiostation给你带来听歌新体验!

文章目录 本教程解决的问题是:按照本教程方法操作后,达到的效果是本教程使用环境:1 群晖系统安装audiostation套件2 下载移动端app3 内网穿透,映射至公网 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿,于是打开手…

10分钟设置免费海外远程桌面

前言 本教程将向您介绍如何使用 Amazon Lightsail 服务的免费套餐轻松搭建属于您的远程桌面。依托于 Amazon 全球可用区,您可以在世界各地搭建符合您配置需求的远程桌面。 本教程需要先拥有亚马逊云科技海外账户。现在注册亚马逊云科技账户可以享受12个月免费套餐…

基于springboot广场舞团系统springboot16

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…

云服务器ECS_云主机_服务器托管_计算-阿里云

阿里云服务器是什么?云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,云服务器可以降低IT成本提升运维效率,免去企业或个人前期采购IT硬件的成本,阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

Linux0.11——第一回 最开始的两行代码

按下开机键后究竟发生了什么 官方教科书说法: BIOS 按照“启动顺序”,把控制权转交给排在第一位的存储设备:硬盘。然后在硬盘里寻找主引导记录的分区,这个分区告诉电脑操作系统在哪里,并把操作系统被加载到内存中&…