热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

完全二叉树的先序遍历,二叉树的先序遍历和后序遍历相反

二叉树遍历基础概念分析:遍历:编写程序时,读取二叉树中内容的顺序(本人理解为此)。先序中序后序:二叉树的先序,中序,后序中的“先中后”是相对于“根”而言的,意思是在什么时候遍历根节

二叉树遍历基础概念分析: 遍历:编写程序时,读取二叉树中内容的顺序(本人理解为此)。先序/中序/后序:二叉树的先序,中序,后序中的“先中后”是相对于“根”而言的,意思是在什么时候遍历根节点。遍历规律:中序遍历来确定一个元素的左边有哪些元素、右边有哪些元素(确定大体的位置);后序/先序遍历来确定哪个元素在左,哪个元素在右(确定最终的位置)。

下面以自己画的一个二叉树为例,来说明一下各种遍历方法。

先序遍历

访问根节点;先序遍历左子树;先序遍历右子树(ABDGHECFI)

中序遍历

中序遍历左子树;访问根节点;中序遍历右子树(GDHBEACIF)

后序遍历

后序遍历左子树;后序遍历右子树;访问根节点(GHDEBIFCA)

(本来想着给大家再写一下这些遍历的代码实现。最近一直没有在学习,所以给大家推荐一篇大神的文章,里面递归实现和堆栈实现都有些,写的也挺详细的。大家自行参考哦!二叉树遍历方式代码实现)

如何通过两个遍历方式来计算第三个遍历方式?

首先必须要知道中序遍历,这样才能通过先序或者后序遍历来判断根的左右子树,从而逐个的判断出每个数所在的位置。
**举个栗子(搞错了,For example):**已知一个二叉树的先序遍历序列(ABDGHECFI)和中序遍历序列(GDHBEACIF),求该二叉树的后序遍历?
解答:

- 首先通过先序遍历序列确定序列(GDHBEACIF)根节点为A;其次通过中序遍历序列得出A节点左边(左子树以及其下的子树)为GDHBE,右边为CIF。 - 再首先通过先序遍历序列确定序列(GDHBE)根节点为B,确定序列(CIF)根节点为C;再其次通过中序遍历序列得出B节点左边为GDH,右边为E(即为B的右子树)、得出C节点左边为没有,右边为E(即为B的右子树)。 - 再再首先通过先序遍历序列确定 序列(GDH)根节点为D;再再其次通过中序遍历序列得出D节点的左边为G(即为左子树),右边为H(即为右子树)。

最后就得出了这个二叉树的真实排布方式,从而可以简单的写出它的后续遍历序列。是不是被我的文字所折服——“首先~ 其次~ 。 再首先~ 再其次~ ”。其实后面的“再首先~ 再其次~”都和前面的“首先 其次”中讲的方法都是一样的。便于大家观察理解,我画一个草图吧。最终可以轻松计算其后续遍历序列为:GHDEBIFCA

(条件有限,大家就这样看吧,应该能看清楚。摸摸哒)

("自己做的每一次决定,都请你不要后悔。生活本就是未知的,为何不放手一搏呢? FIGHTING…")

一分快三大小单双位技巧准确率99序或者后序遍历来判断根的左右子树,从而逐个的判断出每个数所在的位置。
**举个栗子(搞错了,For example):**已知一个二叉树的先序遍历序列(ABDGHECFI)和中序遍历序列(GDHBEACIF),求该二叉树的后序遍历?
解答:

- 首先通过先序遍历序列确定序列(GDHBEACIF)根节点为A;其次通过中序遍历序列得出A节点左边(左子树以及其下的子树)为GDHBE,右边为CIF。 - 再首先通过先序遍历序列确定序列(GDHBE)根节点为B,确定序列(CIF)根节点为C;再其次通过中序遍历序列得出B节点左边为GDH,右边为E(即为B的右子树)、得出C节点左边为没有,右边为E(即为B的右子树)。 - 再再首先通过先序遍历序列确定 序列(GDH)根节点为D;再再其次通过中序遍历序列得出D节点的左边为G(即为左子树),右边为H(即为右子树)。

最后就得出了这个二叉树的真实排布方式,从而可以简单的写出它的后续遍历序列。是不是被我的文字所折服——“首先~ 其次~ 。 再首先~ 再其次~ ”。其实后面的“再首先~ 再其次~”都和前面的“首先 其次”中讲的方法都是一样的。便于大家观察理解,我画一个草图吧。最终可以轻松计算其后续遍历序列为:GHDEBIFCA

(条件有限,大家就这样看吧,应该能看清楚。摸摸哒)

("自己做的每一次决定,都请你不要后悔。生活本就是未知的,为何不放手一搏呢? FIGHTING…")


推荐阅读
  • 在macOS环境下使用Electron Builder进行应用打包时遇到签名验证失败的问题,具体表现为签名后spctl命令检测到应用程序未通过公证(Notarization)。本文将详细探讨该问题的原因及解决方案。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 本文基于刘洪波老师的《英文词根词缀精讲》,深入探讨了多个重要词根词缀的起源及其相关词汇,帮助读者更好地理解和记忆英语单词。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 深入理解Java中的volatile、内存屏障与CPU指令
    本文详细探讨了Java中volatile关键字的作用机制,以及其与内存屏障和CPU指令之间的关系。通过具体示例和专业解析,帮助读者更好地理解多线程编程中的同步问题。 ... [详细]
author-avatar
温暖白
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有