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

article/2025/7/14 15:42:55

知识总览:

什么是遍历:

按照某种次序把所有节点都访问一遍

 

 二叉树的遍历-分支节点逐层展开法(会这个就行):

先序(根)遍历:根左右   中序(根)遍历:左根右     后序(根)遍历:左右根

分支节点逐层展开法:先把节点按照先中后遍历顺序写上,再依次对非叶子节点进行展开

如下第5张图:先序遍历

1.按照根左右遍历顺序为A      B     C

2.B、C为非叶子节点,把B、C按照先序遍历再展开即B->B作为根是BDE,C作为根展开为CF,则目前序列为ABDECF

3.再看D、E、F是否为叶子节点,不是叶子节点的再次展开,即把D节点展开即D作为根是DG即序列为ABDGECF

代码: 

先序遍历代码

在根节点不为空的情况下,根据根左右的顺序,依次访问根节点,递归访问左子树、右子树节点

如下第二张图:先访问根节点即T=A,然后A不为空则visit(A)访问A,函数调用栈记录当前执行方法的相关信息如参数和执行行数,然后PreOrder递归访问A的左子树B,即T=B,B不为空访问B,然后再递归访问B的左子树即T=D,D不为空访问D再递归访问D的左子树,此时D的左子树为空则在下一轮循环中直接退出,即在函数调用栈中在T=NULL后然后马上弹出栈,即在T=NULL这一轮中执行到了126行,先把这一轮方法执行完,即弹出后即PreOrder(T->lchild)执行完后继续执行127行代码即PreOrder(T->rchild)开始PreOrder执行D的右子树即T=G每调用一次函数就压一次栈,即T=D时调用PreOrder(T->rchild)127行代码,然后G不为空访问G,T=G时再执行PreOrder(T->lchild)126行代码,再压栈一次,此时T=G的左子树=NULL,此时T=null弹出栈,现在执行到T=G的126行代码,再执行T=G的127行代码即执行T=G的右子树=NULL,则T==NULL弹出,此时T=G执行完弹出,然后执行T=D 127行代码已经执行结束,则弹出,则到T==B 126行代码该执行T==B 127行代码,即T==B的右子树=E,然后E不为空访问E,执行T==E 126行代码压栈,此时T== E的左子树==NUll为空弹出,则该执行T==E 127行代码压栈,此时T== E的右子树==NUll为空弹出,则到T==E 127行代码此时该轮函数执行完弹出,则函数调用栈中剩余T==A 126行代码则该执行T==A 127行代码,即T==A的右子树=C,C不为空访问C,执行T==C 126行代码压栈,即T==C的左子树==F,F不为空访问F执行T==F 126行代码压栈,即T==F的左子树==Null为空栈弹出,然后函数调用栈顶部为T==F 126行代码,则该执行T==F 127行代码即压栈,T==F的右子树==NUll为空栈弹出,则此时调用栈中T==F 127行代码整个方法执行结束栈弹出,调用栈剩T==C 126行代码则该执行T==C 127行代码压栈,即T==C的右子树==NULL则为空栈弹出,剩余T==C 127行即该轮执行结束弹出,调用栈剩T==A 127行代码即该轮执行结束弹出,即函数调用栈为空执行结束

中序遍历代码

在根节点不为空的情况下,根据左根右顺序,递归访问左子树,访问根节点,递归访问右子树节点

后序遍历代码 

在根节点不为空的情况下,根据左右根顺序,递归访问左子树、右子树,再访问根节点

求树的深度-应用

可以先序遍历左子树深度,再先序遍历右子树深度,然后求这俩的最大深度再加1即为树的深度

 

知识回顾:

 

。。。。。。。。。。。。 

 


http://www.hkcw.cn/article/wSBsbtFWcA.shtml

相关文章

SpringMVC的注解

1. SpringMVC:Spring Web MVC 2. RequestMapping 既是类注解,又是方法注解 3. 访问的URL路径:类路径方法路径 4.后端开发人员测试接口,通常使用postman或其他类似工具来发起请求 对于后端而言,使用postman或form表单&#xff0…

ipfs下载和安装(windows)

关于ipfs介绍,网上一大堆,这里就不讲了。 zip安装包下载衔接:https://github.com/ipfs/kubo/releases/download/v0.35.0/kubo_v0.35.0_windows-amd64.zip 下载之后解压,将文件放到一个合适的目录。 配置系统环境变量&#xff08…

World of Warcraft Hunter [Grandel] [Ancient Petrified Leaf]

World of Warcraft Hunter [Grandel] [Ancient Petrified Leaf] 猎人史诗弓任务 [远古石叶][罗克迪洛尔,上古守护者的手杖][伦鲁迪洛尔,上古守护者的长弓] 最伟大的猎手 Grandel,很多年前的图片。史诗弓流程。

【LeetCode 题解】两数之和(C++/Python 双解法):从语法到算法的全面解析

【LeetCode题解】两数之和(C/Python双解法):从语法到算法的全面解析 一、题目描述 题目链接:1. 两数之和 难度:简单 要求:给定一个整数数组 nums 和一个整数目标值 target,在数组中找出两个数…

《AI Agent项目开发实战》DeepSeek R1模型蒸馏入门实战

一、模型蒸馏环境部署 注:本次实验仍然采用Ubuntu操作系统,基本配置如下: 需要注意的是,本次公开课以Qwen 1.5-instruct模型为例进行蒸馏,从而能省略冷启动SFT过程,并且 由于Qwen系列模型本身性能较强&…

17.进程间通信(三)

一、System V 消息队列基本结构与理解 消息队列是全双工通信,可以同时收发消息。 结论1:消息队列提供了一种,一个进程给另一个进程发送有类型数据块的方式! 结论2:OS中消息队列可能有多个,要对消息队列进行…

【汽车电子入门】一文了解LIN总线

前言:LIN(Local Interconnect Network)总线,也就是局域互联网的意思,它的出现晚于CAN总线,于20世纪90年代末被摩托罗拉、宝马、奥迪、戴姆勒、大众以及沃尔沃等多家公司联合开发,其目的是提供一…

BayesFlow:基于神经网络的摊销贝叶斯推断框架

贝叶斯推断为不确定性条件下的推理、复杂系统建模以及基于观测数据的预测提供了严谨且功能强大的理论框架。尽管贝叶斯建模在理论上具有优雅性,但在实际应用中经常面临显著的计算挑战:后验分布通常缺乏解析解,模型验证和比较需要进行重复的推…

高压电绝缘子破损目标检测数据集简介与应用

在电力系统中,高压电绝缘子起着关键的绝缘与机械支撑作用。一旦发生破损,不仅影响输电线路的安全运行,还可能引发电力事故。因此,利用目标检测技术对高压绝缘子的破损情况进行智能识别,已成为当前电力巡检中的重要研究…

深度学习与神经网络 前馈神经网络

1.神经网络特征 无需人去告知神经网络具体的特征是什么,神经网络可以自主学习 2.激活函数性质 (1)连续并可导(允许少数点不可导)的非线性函数 (2)单调递增 (3)函数本…

paoxiaomo的XCPC算法竞赛训练经验

楼主作为一个普通二本的ICPC选手,在0基础的情况下凭借自学,获得过南昌邀请赛金牌,杭州区域赛银牌,一路上经历过不少的跌宕起伏,如今将曾经摸索出来的学习路线分享给大家 一,语言基础 学习C语言基础语法&a…

电力系统时间同步系统

电力系统中,电压、电流、功率变化等特征量测量都是时间相关函数[1],统一精准的时间源对于电网安全稳定运行至关重要,因此,电力系统运行规程[2]中明确要求继电保护装置、自动化装置、安全稳定控制系统、能量管理系统和生产信息管理…

Codeforces Round 1028 (Div. 2)(A-D)

题面链接:Dashboard - Codeforces Round 1028 (Div. 2) - Codeforces A. Gellyfish and Tricolor Pansy 思路 要知道骑士如果没了那么这个人就失去了攻击手段,贪心的来说我们只需要攻击血量少的即可,那么取min比较一下即可 代码 void so…

金属材料资料

一、金属材料 1. 黑色金属材料(钢铁材料) 铸铁(含碳量>2.11%) 分类: 按碳存在形式:白口铸铁(硬脆,炼钢原料)、灰口铸铁(应用最广)、…

mysql专题上

连接服务器 mysql -h 127.0.0.1 -P 3306 -u root -p -h后接的是要连接的部署了mysql的主机,127.0.0.1指的是单机访问,如果没有指令则直接连接本地 -P后接的是端口号 一般是3306 -u后接的是要登入的用户 -p指要登陆密码 如果要退出可以直接quit mysql…

DAY43打卡

浙大疏锦行 kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 fruit_cnn_project/ ├─ data/ # 存放数据集(需手动创建,后续放入图片) │ ├─ train/ …

蓝天影院订票网站的设计V3

1 绪 论 1.1 本课题研究背景 20世纪90年代中期以来,随着以Internet为代表的计算机技术,网络技术和信息技术的迅速发展,影院订票也逐渐转移到网络上[1][2]。伴随着我国计算机信息产业的飞速进步,计算机的开发应用已经遍布生活…

Python----目标检测(《YOLO9000: Better, Faster, Stronger》和YOLO-V2的原理与网络结构)

一、YOLO9000: Better, Faster, Stronger 1.1、基本信息 标题: YOLO9000: Better, Faster, Stronger 作者: Joseph Redmon, Ali Farhadi 机构: 华盛顿大学1, 艾伦人工智能研究所2 发布时间: 2016年(根据arXiv编号1612.08242推断) 论文链接: [1612.0…

力扣HOT100之动态规划:32. 最长有效括号

这道题放在动态规划里属实是有点难为人了,感觉用动态规划来做反而更难理解了,这道题用索引栈来做相当好理解,这里先讲下索引栈的思路。 索引栈做法 我们定义一个存放整数的栈,定义一个全局变量result来记录最长有效子串的长度&a…