数据结构-5.6.二叉树的先,中,后序遍历

news2024/11/23 23:10:47

一.遍历:


二.二叉树的遍历:利用了递归操作

1.简介:

二叉树的先序遍历,中序遍历,后序遍历都是以根结点遍历顺序为准的,如先序遍历就先遍历根结点

2.实例:

例一:

例二:
  • 先序遍历:

  • 中序遍历:

  • 后序遍历:

叶子结点可以当作是左结点和右结点都是空结点的结点:

3.练习:

注:左子树的全部结点遍历完后才会开始遍历右子树

如果一个结点是分支结点而不是叶子结点的话,就需要嵌套递归的按照特定的遍历序列把该结点展开到下一级


三.遍历二叉树的代码实现:

1.先序遍历:

2.中序遍历:

3.后序遍历:

  • 上述代码(先/中/后序遍历的代码)的visit函数没有固定内容,他是用来访问根结点的,比如内容可以是打印根结点,修改根结点等;

  • 当PreOrder函数的形参T为NULL时,就会停止访问结点即递归停止;

4.以先序遍历为例,分析其代码的递归过程:路过结点不代表就访问该结点,是否访问该结点和采取的遍历方式有关

首先传入结点A,压入栈顶:

结点A不为空(因为为空的话就不会有下面的结点了),系统会记录该行代码的位置,再访问结点A的左子结点,递归调用函数后传入A的左子结点,访问A的左子结点即B结点,B结点不为空压入栈顶,再记录操作结点B这行代码的位置:

访问B的左子结点,B的左子结点D不为空,会压入栈顶,再访问D的左子结点:

D的左子结点为空,因此这一层函数中不做任何处理:

此时操作D的左子结点的函数就需要出栈,此时就返回到对结点D处理的这一次函数:

操作D结点的第126行代码执行完毕,就该执行第127行代码,此时传入的参数就是D结点的右子结点即G结点:

访问G结点,G结点压入栈顶:

此时该访问G结点的左子结点,G结点的左子结点为空:

由于G结点的左子结点为空,所以什么都不做:

回到G结点这一层函数,此时该执行第127行代码,访问G结点的右子结点:

由于G结点的右子结点为空,所以什么都不做:

此时操作G结点的这一层函数执行完毕,回到操作D结点的这一层函数:

此时操作D结点的这一层函数执行完毕,回到操作B结点的这一层函数:

回到B结点这一层函数,此时该执行第127行代码,访问B结点的右子结点即E结点,易知E结点访问完之后就会回到操作B结点的这一层函数:

操作B结点的这一层函数也已经执行完毕,回到操作A结点的这一层函数,执行第127行代码:

操作A的右子结点C,之后的操作过程和之前同理,这里就不再赘述:

过程解析:

5.中序遍历和后序遍历的解析:

6.递归算法进行遍历二叉树的空间复杂度为O(h),其中h为二叉树的高度,加一是因为叶子节点下面还有两个空结点,所以处理空结点的这层函数仍然需要把它的信息压入栈顶,因此空间复杂度为O(h+1),等价于O(h):

7.小练习:


四.求树的深度(应用):

二叉树有根结点,左子树和右子树的递归特性,所以要求二叉树的高度的话,应该先递归的求出左子树的高度,再求出右子树的高度,之后选择左子树和右子树当中高度较大的那一个,加一就是该二叉树的高度(加一是因为那个根结点):


五.总结:


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

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

相关文章

【LeetCode】动态规划—188. 买卖股票的最佳时机 IV(附完整Python/C++代码)

动态规划—188. 买卖股票的最佳时机 IV 题目描述前言基本思路1. 问题定义交易规则: 2. 理解问题和递推关系两种情况:状态定义:状态转移方程:初始条件: 3. 解决方法动态规划方法特殊情况:当 k 大于等于 pric…

【最新华为OD机试E卷-支持在线评测】构成正方形的数量(100分)多语言题解-(Python/C/JavaScript/Java/Cpp)

🍭 大家好这里是春秋招笔试突围 ,一枚热爱算法的程序员 💻 ACM金牌🏅️团队 | 大厂实习经历 | 多年算法竞赛经历 ✨ 本系列打算持续跟新华为OD-E/D卷的多语言AC题解 🧩 大部分包含 Python / C / Javascript / Java / Cpp 多语言代码 👏 感谢大家的订阅➕ 和 喜欢�…

(全网独家)面试要懂运维真实案例:HDFS重新平衡(HDFS Balancer)没触发问题排查

在面试时,面试官为了考察面试者是否真的有经验,经常会问运维集群时遇到什么问题,解决具体流程。下面是自己遇到HDFS Balancer没执行,花了半天时间进行排查,全网独家的案例和解决方案。 目录 使用CDH自带重新平衡操作…

数据结构 ——— 顺序表oj题:最长公共前缀

目录 题目要求 代码实现 题目要求 编写一个函数来查找字符串数组中的最长公共前缀,如果不存在公共前缀,返回空字符串 "" 代码实现 代码演示: void CommonPrefix(char** strs, int strsSize, char* returnStr) {char* first_r…

利用session机制造测试账号,无需前端也可以测试后端接口

适用场景:我们在测试的时候经常会遇到前端还没有开发完毕,后端已经结束开发了,但是后端的有些接口是需要特定的账号身份调用才会生效,此时因为前端未开发完毕,所以我们不能通过web页面进行登录,那么如何解决…

【Python Django + Vue】酒店在线预订系统:用技术说话!

🎓 作者:计算机毕设小月哥 | 软件开发专家 🖥️ 简介:8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 🛠️ 专业服务 🛠️ 需求定制化开发源码提…

Parallels Desktop意外退出,Parallels Desktop安装软件很卡闪退怎么办?

Parallels Desktop是目前很优秀的虚拟机软件,操作简单,兼容性强而且安装也非常方便,备受苹果用户的喜爱和满意。然而,部分用户在使用Parallels Desktop的时候,会遇到意外退出或终端关机的情况,这不仅会影响…

VS2017 编译 SQLite3 动态库

首先官方下载源码: Tags sqlite/sqlite (github.com) 1.安装 VS2017 community edition 2.打开VS2017命令行工具 3.安装TCL 开发库,推荐 TCL 9.0 先下载源码: Tcl/Tk 9.0 使用vs2017编译tcl&

CRC码计算原理:按位讲解计算过程

CRC8 这里先以CRC8来说明CRC的计算过程 1、CRC8在线计算器 通过CRC在线计算器可以看见CRC8的特征多项式:x8x2x1,初始值为0000’0000。 CRC计算的核心是:反转异或移位(此处的CRC8没有涉及反转,见后面CRC16&#xff0…

基于Langchain框架下Prompt工程调教大模型(LLM)[输入输出接口、提示词模板与例子选择器的协同应用

大家好,我是微学AI,今天给大家介绍一下基于Langchain框架下Prompt工程调教大模型(LLM)[输入输出接口、提示词模板与例子选择器的协同应用。本文深入探讨了Langchain框架下的Prompt工程在调教LLM(大语言模型)方面的应用&#xff0c…

C++入门基础知识110—【关于C++嵌套 if 语句】

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于C 嵌套 if 语句的相关内容! …

全院级、流程化的医院安全不良事件管理系统源码——等级医院评审工作的辅助工具

前言: 冰山理论”指出“每件严重不良事件背后可能隐藏着10件轻微的不良事件”“存在30件未造成伤害的差错可能存在600件引发意外的异常事件”没有一件不良事件应该被忽视! 一项研究也指出95%医生曾目睹错误的发生,61%的医务人员认为医疗错误…

WebGL 小白入门学习

1. WebGL是什么? WebGL(Web Graphics Library)是一种JavaScript API,它允许你在不需要安装任何额外插件的情况下,直接在浏览器中渲染高性能的2D和3D图形。WebGL利用了用户的图形处理单元(GPU)来…

Unity 3d 鼠标设置的问题——隐藏/显示鼠标、锁定/解锁/限制鼠标、自定义鼠标形状

在unity开发的过程中,我们常常会遇到一些问题,有时会发现鼠标不见了,有时发现鼠标在屏幕中心不能动,有时又想有图片自己定义一个鼠标形状。本文将对这些问题逐一进行探讨。 一、设置鼠标的可见性 使用语句: Cursor.vis…

网络初识基本概念总结

网络发展背景 经历了 单机阶段 -> 局域网阶段 -> 广域网阶段 -> 移动互联网阶段 (简单介绍一下) 其他一些小概念 局域网LAN: 是把一些设备通过交换机 / 路由器连接, 形成的私有网络广域网WAN: 是把更多的局域网相互连接起来,当规模足够大时形成广域网交换机和路由器…

Rhymes AI发布首款开源多模态AI模型Aria 性能超越GPT-4o mini等多家知名AI模型

最近,日本东京的初创公司 Rhymes AI 推出了他们的首款人工智能模型 ——Aria。该公司自称,Aria 是全球首个开源的多模态混合专家(MoE)模型。这个模型不仅具有处理多种输入模态的能力,还声称在能力上与一些知名的商业模…

大一高等数学速成指南

大一高等数学速成指南 高等数学作为大学理工科学生的基础课程,对于许多新生来说,既是挑战也是机遇。本文将为你提供一个高效的学习指南,帮助你快速掌握高等数学的核心内容。 1. 理解课程大纲 首先,你需要了解高等数学的课程大纲…

Linux(1. 基本操作_命令)

目录 关于超级用户root: root用户可以做什么? 避免灾难: 格式约定: 浏览硬盘: 命令行补全和通配符: 命令行补全: 通配符: 常用基本命令: 查看目录和文件&#xff…

使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题

一、使用SpringMVC搭建WEB项目时报错404的问题排查解决 很早前(4年前)就把这个搭建过,但今天运行的时候就是报404错误,见文章: JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例…

Unity3d折叠Inspector中的变量

InspectorFoldoutGroup插件 [Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpDownGraph aimStabilityGraph;[Pixeye.Unity.Foldout("【曲线图】")] public BrokenLineUpGraph aimDensityGraph;[Pixeye.Unity.Foldout("【曲线图】")] p…