30秒解出已知先/后序遍历与中序遍历求出后/先序遍历

2023-10-13 18:30

本文主要是介绍30秒解出已知先/后序遍历与中序遍历求出后/先序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看完下面这个方法会让你心生四字
卧槽,牛逼!!!

  画不多说,直奔主题,在昨天晚上室友做题时做到这种已知先/后序与中序遍历,让你求出后/先序遍历,最开始我采用的仍然是老办法,根据先序或者后序的结果确定根节点,在看中序结果,根据根节点在中序的位置,求出左右子树,然后递归求解剩下的节点,画出二叉树。

  那么既然说到30秒写出答案,上面这种方法直接丢掉,接下来就是见证奇迹的时刻。
拿题说话:
第一种情况:已知先序中序求后序:

 
我们只需画一个矩阵:

纵轴从上到下写出先序遍历结果,横轴从左往右写出中序遍历结果,然后把纵轴和横轴对应的字母写出来,谁在最上面谁就是双亲节点,在该字母左边的就是该字母的左子树,右边就是右子树。就比如上面这道题。

矩阵图如下:

  按照上述方法写出先序遍历结果以及中序遍历结果后,s对s,t对t,u对u,w对w,v对v,在矩阵中写出来,然后先后连接,二叉树就完美的画出来了,自然而然后序的结果就是:wuvts。写到这里是不是感觉这个方法异常的流批。

那么有人就会有疑问,为什么v要连接t而不是w呢,上面说到,在图中,处在节点左边的就是该节点的左子树,右边就是右子树,v在t的右边,那么就是t的右子树,所以t和v连接。
还有就是要注意u在w的上面,所以t先连接u,w在u的右下边就是u的右子树在连u。在做题的时候矩阵对应的字母先后顺序一定要画准确,最好用个带格格的纸。

第二种情况:已知中序后序求先序

        方法完全一样,只需把后序遍历的结果按照从后往前的顺序写出来。
      拿题说话:



矩阵图:

 和已知先序遍历唯一的不同就是纵轴的顺序,是按照后序遍历结果从后往前自上到下写下来。

总结:

方法简单粗暴,注意的点就是矩阵图画准确,明确在图中节点左边就是该节点左子树,右边就是右子树。以及注意图中节点上下位置,在该节点上方就是该节点的双亲节点,在下方就是孩子节点,同一行就是兄弟节点。

码字不易,记得点赞收藏哦!!!



 

这篇关于30秒解出已知先/后序遍历与中序遍历求出后/先序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205084

相关文章

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

Java遍历HashMap的6种常见方式

《Java遍历HashMap的6种常见方式》这篇文章主要给大家介绍了关于Java遍历HashMap的6种常见方式,方法包括使用keySet()、entrySet()、forEach()、迭代器以及分别... 目录1,使用 keySet() 遍历键,再通过键获取值2,使用 entrySet() 遍历键值对3,

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr