数据结构 二叉树 前 中 后 序列

news/2024/9/20 14:47:33/文章来源:https://www.cnblogs.com/Luo-Xi/p/18325711

简单二叉树的 遍历

如果看完还是不太懂 就观看速成视频
https://www.bilibili.com/video/BV1Ub4y147Zv/?spm_id_from=333.337.search-card.all.click&vd_source=e5f8765d50fb89ef04eb150bd76075b5
引用资料文献链接放到篇尾

简单术语解释

  1. 节点 (Node):二叉树中的一个元素,包含值和指向子节点的引用

  2. 根(Root):二叉树的顶部节点, 没有父节点。(一般时最上的单个节点)

  3. 叶(Leaf): 没有子节点的节点。 (一般时最底下的节点)

  4. 左子树/右子树(Left/Right Subtree):分别位于一个节点的左边和右边的子树

  5. 父节点(Parent):节点的上一级节点。

  6. 子节点(Child):节点的下一级节点。
    image

前序遍历

前序遍历 根节点 第一个
根节点左子树 依次记录 直到达到 左子树,途中的内部节点都写记录

要诀: ——根节点——>左子树的节点——>直到左子树的叶——>叶的 父节点的 右子树的 子节点

前序遍历结果 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15

image

拆分解析:倾斜数字 是加入前序的值
根节点: 1——
子节点往下

左子树的节点: 2——
子节点往下

左子树的节点: 3——
子节点往下

左子树的节点同时也是叶: 4——
往上回到 父节点 3 发现 右子树的节点 5 往下

右子树的节点同时也是叶: 5——
往上回到父节点 3 发现左右子树的节点都已遍历完
往上回到父节点 2 发现右子树的节点 6 往下

右子树的节点 :6——
子节点往下

左子树的节点 同时也是叶 :7——
往上回到父节点 6 发现右子树的节点 8 往下

右子树的节点 同时也是叶 :8——
往上回到父节点 6 遍历完
往上回到父节点 2 遍历完
往上回到根节点 1 往右边遍历 重复上面操作

中序遍历

中序遍历 根节点 在中间

中序和前序不同 前序是 从上往下记录 但是中序是从 左叶节点往上记录

左叶节点:是从根节点开始,一直左子树 直到 没有左子树

根节点左子树 途中不用记录 直到达到 左子树,才开始记录,可以有右子树的节点

要诀: 左叶 节点——>叶 父节点——>右子树的节点 的 左叶 节点——>直到没有左叶节点

中序遍历结果 4,3,5,2,7,6,8,1,11,10,12,9,14,13,15

红色数字的是第几个访问到的

image

拆分解析:倾斜数字 是加入中序的值

左叶节点: 4——
往上回到 父节点 3

父节点:3——
发现 右子树的节点 5 没有记录 右子树的节点 5开始 往下

右子树的节点同时也是叶: 5——
往上回到父节点 3 发现左右子树的节点都已遍历完

往上回到父节点: 2——
发现 右子树的节点 6 没有记录 右子树的节点 6开始 往下

左叶节点:7——
往上回到 父节点 6

父节点: 6——
发现 右子树的节点 8 没有记录 右子树的节点 8开始 往下

右子树的节点同时也是叶: 8——
往上回到父节点 6 发现左右子树的节点都已遍历完
往上回到父节点 2 发现左右子树的节点都已遍历完

返回父节点根节点: 1——

后序遍历

后序遍历 根节点 在后间

后序和中序很像都是从 左叶节点 往上记录 不同于中序的是 后序记录节点时必须是即没有子节点

根节点左子树 途中不用记录 直到达到 左子树,如果当前节点右子树节点则继续往下直到找到最左侧的

要诀: 左叶 节点——>叶的父节点的 右子树节点 的 左叶 节点——>直到没有左叶节点

后序遍历结果 4,5,3,7,8,6,2,11,12,10,14,15,13,9,1

红色数字的是第几个访问到的
image

拆分解析:倾斜数字 是加入后序的值

左叶节点: 4——
往上回到父节点: 3,发现存在子节点,往下

未发现子节点
右子树: 5——

往上回到父节点: 3,未发现子节点
父节点: 3——

往上回到父节点: 2,发现存在子节点,往下
右子树: 6 发现子节点,往下

未发现节点
左子树节点:7——
往上回到父节点: 6,发现存在子节点 往下

未发现节点
右子树节点:8——

往上回到父节点: 6,未发现子节点
父节点: 6——

往上回到父节点: 2,未发现子节点
父节点: 2——

将右侧 按照上述 进行修改 最后再加入
根节点 1 ——

资料文献

博客园 作者:ACHanHan 标题:二叉树的遍历及例题 有附代码实现:
https://www.cnblogs.com/AC673523745/p/13991094.html
Csdn 作者:白菜喵 标题:彻底弄懂二叉树的先序、中序、后序三种遍历与做题 有比较复杂的(如:只有一个节点单向 左/右二叉树,附上 前中后序 答案参考))
(因网站限制需要登陆关注才能看完,(如果不想登陆也可以看一下的,我就没登陆))
https://blog.csdn.net/eebaicai/article/details/89788098
速成视频 这个是真的快,看一下基本可以懂七七八八
https://www.bilibili.com/video/BV1Ub4y147Zv/?spm_id_from=333.337.search-card.all.click&vd_source=e5f8765d50fb89ef04eb150bd76075b5

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

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

相关文章

【YOLOv8改进- 多模块融合改进】GhostConv + ContextAggregation 幽灵卷积与上下文聚合模块融合改进,助力小目标高效涨点

YOLOv8目标检测创新改进与实战案例专栏专栏目录: YOLOv8有效改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例专栏链接: YOLOv8基础解析+创新改进+实战案例ContextAggregation介绍摘要 卷积神经网络(CNNs)在计算机视觉中…

小型团队缺陷管理系统指南:如何选型

国内外主流的10款小型团队使用的缺陷管理系统对比:PingCode、Worktile、禅道(ZenTao)、Tapd、Teambition、Tower、Jira、DoneDone、Bugzilla、MantisBT。在小型团队中,选择合适的缺陷管理系统似乎总是一个头痛的问题。你可能已经发现,一个有效的系统不仅可以帮助你追踪和修…

SIEM是什么?企业安全

随着信息技术的不断发展,企业面临的安全威胁也在迅速增加,为了有效应对这些挑战,越来越多的企业开始关注安全信息与事件管理即SIEM:Security Information and Event Management技术。那么SIEM究竟是什么,它对企业安全有何作用呢? SIEM技术是一种综合性的安全解决方案,通…

「代码随想录算法训练营」第二十一天 | 回溯算法 part3

93. 复原 IP 地址题目链接:https://leetcode.cn/problems/restore-ip-addresses/ 题目难度:中等 文章讲解:https://programmercarl.com/0093.复原IP地址.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/ 题目状态:好难,看题解通过思路: 和分割回文串一样,…

Jetpack Compose学习(12)——Material Theme的主题色切换

原文:Jetpack Compose学习(12)——Material Theme的主题色切换-Stars-One的杂货小窝闲着无事研究了下Jetpack Compose M3 主题切换效果本系列以往文章请查看此分类链接Jetpack compose学习如何生成主题 首先,我们需要知道的是,M3有提供个在线网站供开发者进行快速生成主题,详情…

UG二次开发NXOpen-Python(十四)自定义特征(CustomFeature)

可以通过二次开发建立自定义特征,实现和长方体、圆柱等一样的特征插入和特征编辑操作。如下图所示:   点击确定后,即可在指定点生成一个指定长度的正四面体,并且双击该特征即可进行编辑并更新。 未完待续

Telegram纸飞机统计机器人源码,TG群记账群发机器源码人,TG自动记账全开源版本

Telegram纸飞机统计机器人源码,TG群记账群发机器源码人,TG自动记账全开源版本 一.thinkphp6框架开发 按thinkphp6部署+伪静态+php7.4 数据库连接信息在config文件夹database.php文件修改 后台账号:admin 密码 123321. (有个小数点) 二.机器人部署 1.去tg官方申请机器人获取到t…

项目环境出现PHP 502 Bad Gateway 问题排查

一、现象 昨天运维人员被告知,在升级完客户集群环境后,访问管理页面偶尔会报 502 Bad Gateway二、排查思路 1、看到 502 第一时间想到的应该是 php-fpm 出问题了,先看下 nginx 日志,连接被对端关闭,说明 php-fpm 进程提前退出了,那是什么原因导致 php-fpm 退出了呢? 2、…

mysql8: 新建账号和权限操作

一,允许从任何ip访问时,用% CREATE USER myusername@% IDENTIFIED BY my_password;GRANT ALL PRIVILEGES ON `mybase`.* TO myusername@%;FLUSH PRIVILEGES; 注意:这种做法在生产环境中不要使用,不够安全, 只用于内部开发时工程师共同访问的内部环境 二,授权的例…

windows中MySQL迁移数据存放盘符位置

由于刚开始安装mysq时都选择了默认安装,数据存放在了c盘,后面数据量过大c盘不堪重负,所以迁移数据到D盘windows中MySQL迁移数据存放盘符位置 参考:https://blog.csdn.net/ZYX121799/article/details/136474869查看MySQL的数据存放位置 show global variables like "%d…

前端性能优化实践方向与方法

前端性能优化实践方向与方法0x01 代码优化与压缩 (1)HTML移除不必要的空白字符、注释和冗余标签,以减少文件大小使用命令 npm install html-minifier -g 安装 HTML Minifier使用命令 html-minifier -V 确认安装成功在 Node.js 环境中配置 index.js // 引入 HTML Minifier co…

【YashanDB知识库】开源调度框架Quartz写入Boolean值到YashanDB报错

问题现象 Quartz 是一个广泛应用于企业级应用中的开源作业调度框架,它主要用于在Java环境中管理和执行任务。 为了任务调度,Quartz的数据模型中使用了大量的布尔值记录任务、流程的各种状态,如:Quartz使用JDBC写入任务状态代码: ps = conn.prepareStatement(); setBoolean…