05-5.3.1_1 二叉树的先中后序遍历

  • 👋 Hi, I’m @Beast Cheng
  • 👀 I’m interested in photography, hiking, landscape…
  • 🌱 I’m currently learning python, javascript, kotlin…
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

什么是遍历

遍历:按照某种次序把所有结点都访问一遍
层次遍历:基于树的层次特性确定的次序规则
先/中/后序遍历:基于树的递归特性确定的次序规则

二叉树的遍历

二叉树的递归特性:

  1. 要么是个空二叉树
  2. 要么就是由“根结点+左子树+右子树”组成的二叉树
    如果是空二叉树,那么我们什么都不要做
    如果是非空二叉树:
  • 先序遍历:左右(NLR)
  • 中序遍历:左右(LNR)
  • 后序遍历:左右(LRN)
    在这里插入图片描述

先序遍历:ABC
中序遍历:BAC
后序遍历:BCA
在这里插入图片描述

先序遍历:AB
中序遍历:BA
后序遍历:BA
![[Pasted image 20240616132255.png]]

先序遍历:AC
中序遍历:AC
后序遍历:CA
![[Pasted image 20240616132322.png]]

先序遍历:A BDE CFG
中序遍历:DBE A FCG
后序遍历:DEB FGC A
![[Pasted image 20240616140446.png]]

先序遍历:A BDGE CF
中序遍历:DGBE A FC
后序遍历:GDEB FC A

手算练习

![[Pasted image 20240616140932.png]]

算数表达式的“分析树”
a + b ∗ ( c − d ) − e f a+b*(c-d)-\frac{e}{f} a+b(cd)fe
先序遍历 ——> 前缀表达式: − + a ∗ b − c d / e f -+a*b-cd/ef +abcd/ef
中序遍历 ——> 中缀表达式(需要加界限符): a + b ∗ c − d − e / f a+b*c-d-e/f a+bcde/f
后序遍历 ——> 后缀表达式: a b c d − ∗ + e f / − abcd-*+ef/- abcd+ef/

先序遍历的代码

先序遍历(PreOrder)的操作过程如下:

  1. 若二叉树为空,则什么也不做;
  2. 若二叉树非空:
    1. 访问根结点
    2. 先序遍历左子树
    3. 先序遍历右子树
typedef struct BiTNode{ElemType data;struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;// 先序遍历
void PreOrder(BiTree T){if(T != NULL){visit(T);             // 访问根结点PreOrder(T->lchild);  // 递归遍历左子树PreOrder(T->rchild);  // 递归遍历右子树}
}

空间复杂度 O ( h ) O(h) O(h)
脑补空结点,从根结点出发,画一条路:
如果左边还有没走过的路,优先往左边走,走到路的尽头(空结点)就往回走。
如果左边没路了,就往右边走,如果左右都没路了,就往上面走
先序遍历:第一次路过时访问结点

中序遍历

中序遍历(InOrder)的操作过程如下:

  1. 若二叉树为空,则什么也不做;
  2. 若二叉树非空:
    1. 先序遍历左子树;
    2. 访问根结点
    3. 先序遍历右字数
      脑补空结点,从根结点出发,画一条路,如果左边还有没走的路,优先往左边走,走到路的尽头(空结点)就往回走;
      如果左边没路了,就往右边走;
      如果左右都没路了,就往上走。
      中序遍历:第二次路过时访问结点(每个结点都会被路过3次)

后序遍历

后序遍历(InOrder)的操作过程如下:

  1. 若二叉树为空,则什么也不做;
  2. 若二叉树非空:
    1. 先序遍历左子树;
    2. 先序遍历右字数;
    3. 访问根结点
      脑补空结点,从根结点出发,画一条路,如果左边还有没走的路,优先往左边走,走到路的尽头(空结点)就往回走;
      如果左边没路了,就往右边走;
      如果左右都没路了,就往上走。
      后序遍历:第三次路过时访问结点(每个结点都会被路过3次)

例:求树的深度(应用)

int treeDepth(BiTree T){if (T != NULL){return 0;}else{int l = treeDepth(T->lchild);int r = treeDepth(T->rchild);// 树的深度 = Max(左子树深度,右子树深度)+ 1return l>r ? l+1 : r+1;}
}

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

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

相关文章

大家来决定:python-office运行时的提示信息,要不要删除?

​ 大家好,这里是程序员晚枫,今天想请大家投票决定一下:运行python-office时的下面这种中文提示信息,要不要全部都取消了?👇 为什么加这个提示? 我是在2022年发布的这个开源项目,并…

算法排序之冒泡排序及优化

public class Bubbling {public static void main(String[] args) {// 定义需要排序的数组int[] arr {0,1,21,2,31,12,5,8};// 冒泡排序方法bubbleSort(arr);bubbleOptSort(arr);}/*** 冒泡排序* param arr 数组*/public static void bubbleSort(int[] arr){// i0,…

Python编程环境搭建

简介: Python环境安装比较简单,无需安装其它依赖环境,主要步骤为: 1. 下载并安装Python对应版本解释器 2. 下载并安装一个ide编码工具 一、下载并安装Python解释器 1.1 下载 官网地址:Welcome to Python.org 选择…

Java云HIS医院管理系统源码 B/S架构 一体化电子病历系统源码 基于云端SaaS平台源码,采用B/S(Browser/Server)架构

“云”指系统采用云计算的技术和建设模式,具有可扩展、易共享、区域化、易协同、低成本、易维护、体验好的优势。“H”是医疗卫生,由原来医院 (Hospital)到现在的医疗卫生 (Healthcare),拓展了 H的内涵与外延。云 HIS 重新定义了医院信息系统…

【笔记】为什么不同硬件的1T实际硬盘容量硬盘是954GB或者931GB?

问题描述 不管是电脑还是移动硬盘,厂家描述的1T硬盘容量都不是计算机知识领域内真正的1T大小,硬盘容量实际是小于1TB的。 另外还发现对于1TB的不同厂家设备有着实际不同的磁盘容量,比如为什么有的1T电脑硬盘是954GB,而移动硬盘是…

用Python分析《三国演义》中的人物关系网

用Python分析《三国演义》中的人物关系网 三国演义获取文本文本预处理分词与词频统计引入停用词后进行词频统计构建人物关系网完整代码 三国演义 《三国演义》是中国古代四大名著之一,它以东汉末年到晋朝统一之间的历史为背景,讲述了魏、蜀、吴三国之间…

zabbix自定义监控mysql状态和延迟

zabbix自定义监控mysql状态和延迟 文章目录 zabbix自定义监控mysql状态和延迟zabbix自定义监控mysql状态配置主从配置自定义监控添加监控项添加触发器模拟测试异常 zabbix自定义监控mysql延迟配置自定义监控添加监控项添加触发器测试 zabbix自定义监控mysql状态 配置主从 1.安…

FreeRTOS简单内核实现5 阻塞延时

文章目录 0、思考与回答0.1、思考一0.2、思考二0.3、思考三 1、创建空闲任务2、实现阻塞延时3、修改任务调度策略4、提供延时时基4.1、SysTick4.2、xPortSysTickHandler( )4.3、xTaskIncrementTick( ) 5、实验5.1、测试5.2、待改进 0、思考与回答 0.1、思考一 为什么 FreeRTO…

hbuilderx如何创建html模板

需求:想要将34.html文件的内容作为一个模板,以便后续直接能创建类似内容的html文件 1 首先ctrlc复制模板文件 2 在顶部菜单栏点击 文件 -> 新建 或者使用快捷键 CtrlN 3 在弹出的对话框中选择【自定义模板】 4 将第一步复制的模板文件复制到弹出的文件…

Android Studio项目升级报错:Namespace not specified

原项目升级AGP到8.0时报错: Namespace not specified. Specify a namespace in the modules build file: C:\Users\Administrator\Desktop\MyJetpack\app\build.gradle. See https://d.android.com/r/tools/upgrade-assistant/set-namespace for information about…

IT人的拖延——这个任务太复杂,太难了怎么办?

随着科技的发展,IT人需要不断地运用新技术来解决更多传统方式难以解决的问题,有些问题真的不是不想解决,而是真的太复杂,太难了,根本不知道从何开始,也没有什么前辈的经验可以借鉴。我们这些对事情难度的认…

软链接和硬链接的详解 (Linux系统下)

文章目录 硬链接的引入软链接和硬链接的形成软链接硬链接 软硬链接区别的探究硬链接数结语 硬链接的引入 当我们在命令行中输入ll时会出现很多行信息,详情请看下面的图 ~~~~εεε( ̄▽ ̄) 我在之前的几篇Linux的文章也讲过哦 (o゚v…

ARM32开发--电源管理单元

知不足而奋进 望远山而前行 目录 文章目录 前言 学习目标 学习内容 PMU 电源域 VDD/VDDA域 备份域 1.2V域 省电模式 睡眠模式 深度睡眠模式 待机模式 几种模式总结 WFI和WFE指令 案例需求 模式初始化 源码 总结 前言 在嵌入式系统中,有效的电池管…

buuctf-findKey

exe文件 运行发现这个窗口,没有任何消息 32位 进入字符串就发现了flag{ 左边红色代表没有F5成功 我们再编译一下(选中红色的全部按p) LRESULT __stdcall sub_401640(HWND hWndParent, UINT Msg, WPARAM wParam, LPARAM lParam) {int v5; // eaxsize_t v6; // eaxDWORD v7; /…

【python基础语法1】注释,变量与运算符

这里写自定义目录标题 一、注释分类注意 二、变量变量的声明变量的命名注意 变量的交换常量 三、数据类型分类六大标准数据类型Number 数字类型 分类:2个内置方法 type 和 id自动类型转换强制类型转换容器类型分类:五个字符串类型 str列表类型 list内置函…

【Numpy】一文向您详细介绍 np.round()

【Numpy】一文向您详细介绍 np.round() 下滑即可查看博客内容 🌈 欢迎莅临我的个人主页 👈这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的普通本硕,…

Vue2+Element-ui实现el-table表格自适应高度

效果图 新建指令 Vue.directive(height, {inserted(el, _binding, vnode) {const paginationRef vnode.context.$refs.paginationRefconst calculateHeight () > {const windowHeight window.innerHeightconst topOffset el.getBoundingClientRect().topconst otherEle…

debug调试高级功能 断点、布局 及Android Studio常用快捷按键使用详情

文章目录 debug断点篇:打临时断点(只用一次):alt断点条件断点:在断点上,点击右键,在Condition那里,设置我们需要的值,循环就会自动停到我们设置的那个值那里依赖断点&…

Jmeter多个请求按照比例并发压测的几种方式

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、需求 在压测的过程中,为了能够压测整个链路,通常需要多个接口进行并…

Markdown如何分页操作

Markdown导出分页操作 在平时的文档导出过程中Markdown过程中会出现因为不能分页导致的排版问题。 排版问题在将Markdown文档导出为PDF或其他格式时尤为明显。当文档内容超过一页时,无法自动调整页面布局,导致内容不连续,甚至导致图片或表格…