二叉树系列(二):已知中序遍历序列和后序遍历序列,求先序遍历序列

简介: 前面已经介绍过三种遍历方法的规则,为了大家看着方便,这里我们在重新介绍一遍:  1.先序遍历  (1)访问根结点;  (2)先序遍历左子树;  (3)先序遍历右子树。
前面已经介绍过三种遍历方法的规则,为了大家看着方便,这里我们在重新介绍一遍:

  1.先序遍历

  (1)访问根结点;

  (2)先序遍历左子树;

  (3)先序遍历右子树。

  2.中序遍历

  (1)中序遍历左子树;

  (2)访问根结点;

  (3)中序遍历右子树。

  3.后序遍历

  (1)后序遍历左子树;

  (2)后序遍历右子树;

  (3)访问根结点。

  知道了二叉树的三种遍历规则,只要有中序遍历序列和前后任一种遍历序列,我们就可以求出第三种遍历序列,今天我们研究的是已知中序和后序遍历序列,求先序遍历序列。

  已知该二叉树的中序遍历序列为:D-B-G-E-A-C-F,后序遍历序列为:D-G-E-B-F-C-A。

  接下来我们就可以求出该二叉树的先序遍历序列,具体步骤如下:

  第一步:还是先求root根节点,根据后序遍历规则我们可知root为后序遍历序列的最后一个节点,因此该二叉树的root节点为A。

  第二步:求root的左子树和右子树,这点我们还是从中序遍历序列中找出,位于root节点A左侧的D-B-G-E为root的左子树,位于A右侧的C-F为右子树。

  第三步:求root的左孩子leftchild和右孩子rightchild,leftchild为左子树的根节点,rightchild为右子树的根节点。我们可以找到左子树D-B-E-G在后序遍历序列中的排列顺序为D-G-E-B,由于后序遍历最后访问根节点,所以B为左子树的根节点,即B为root的leftchild;同理root的rightchild为C。

  第四步:我们可以根据上面的步骤找到B的左子树和右子树,以及C的左子树和右子树,然后分别求出左右子树的根节点。以此类推,只要求出根节点及其leftchild和rightchild,剩下的过程都是递归的,最后我们就可以还原整个二叉树。

  根据以上步骤我们求出的二叉树如下图所示:

  

  最后我们直接可以根据先序遍历的遍历规则得出该二叉树的先序遍历序列为:A-B-D-E-G-C-F。

  通过和上一篇博客联系,我们可以看出,不管是知道中序序列和先序序列还是知道中序序列和后序序列求另外一种序列的方法都大同小异,但是从求root的左右子树可以看出,中序序列必须为已知条件。目前以自己的水平还不能根据先序和后序来求出中序,在此不敢妄加断言能或者不能,哪位大神知道结果还希望不吝赐教。

目录
相关文章
|
Java API Apache
基于Spring Boot的天气预报服务
本文,我们将基于 Spring Boot 技术来实现一个微服务天气预报服务接口——micro-weather-basic。micro-weather-basic 的作用是实现简单的天气预报功能,可以根据不同的城市,查询该城市的实时天气情况。
5070 0
|
12天前
|
人工智能 运维 安全
实测阿里版“龙虾”JVS Claw有多强?对比OpenClaw有哪些优势?JVS Claw安装简单且免费用7天
阿里云JVS Claw是基于OpenClaw深度定制的云端AI自动化平台,开箱即用、免部署运维,JVS活动:https://t.aliyun.com/U/42Xzry 支持7天免费试用。相比需手动配置的OpenClaw,JVS Claw提供稳定云端实例、可视化操作、预制办公技能及企业级安全,零门槛赋能非技术人员快速落地AI自动化。
228 4
|
1月前
|
SQL 数据采集 人工智能
|
2月前
|
人工智能 自然语言处理 Linux
【零基础入门】OpenClaw一键秒级部署攻略,小白也能轻松上手!
本文专为AI新手打造,用通俗语言+分步图解,手把手教你零基础部署OpenClaw——一款能“听懂人话、自动干活”的开源AI数字员工。支持云端(阿里云一键9.9元/月)和本地(鼠标+复制粘贴)两种傻瓜式部署,无需代码、不碰环境配置,轻松拥有7×24小时在线的AI助手!
557 3
|
2月前
|
机器学习/深度学习 人工智能 编解码
羊行为识别检测数据集(约4500张图片已标注)| YOLO训练数据集 AI视觉检测
本数据集含约4500张真实牧场场景图像,精准标注“活动”“进食”“躺卧”三类羊行为,采用YOLO标准格式(归一化坐标),覆盖多天气、多姿态、群组与单只场景,适用于智慧养殖、健康监测及YOLO系列模型训练,开箱即用。
|
测试技术
po+selenium+unittest自动化测试项目实战
po+selenium+unittest自动化测试项目实战
3698 0
 po+selenium+unittest自动化测试项目实战
|
监控 C语言 Perl
西门子S7-1200编程实例,基本逻辑运算指令如何使用?
西门子S7-1200中的逻辑运算指令包括逻辑与、逻辑或、逻辑异或、取反、编码、解码、选择、多路复用等。下面我们来介绍基本逻辑运算指令的使用方法。
西门子S7-1200编程实例,基本逻辑运算指令如何使用?
|
机器学习/深度学习 缓存 物联网
RFID 阅读器介绍 | 学习笔记
快速学习 RFID 阅读器介绍
RFID 阅读器介绍 | 学习笔记
|
JavaScript Java 测试技术
一个有故事的按需生成虚拟数据JS库,Faker
曾拥有 2.8 万 star 的**流行库**,原作者却"**删库跑路**",现在由**社区维护**。8名开发者参与其中,赋予其新的生命,同时也想让这个项目,从此变得更酷。
一个有故事的按需生成虚拟数据JS库,Faker
|
机器学习/深度学习 数据挖掘 大数据
零基础入门数据挖掘-心跳信号分类预测冠军赛事解决方案分享
大家好,我是王岳泽,天津大学研究生,数据竞赛爱好者。 我有幸取得了阿里云天池零基础入门数据挖掘-心跳信号分类预测第一名,特将经验分享给大家~ 但由于水平、精力有限,难免存在谬误,请大家海涵!
1742 0
零基础入门数据挖掘-心跳信号分类预测冠军赛事解决方案分享