【计算机基础题目】二叉树的前序中序后续遍历之间相互转换 详细例子

news2024/11/13 8:05:05

创作日志: 笔试题目,掌握了技巧之后这道题就是 so easy~


一、

1、已知二叉树的 前序和中序,可以求出后序
2、已知二叉树的 中序和后序,可以求出前序
3、已知二叉树的 前序和后序,无法求出唯一的中序

二、求法

求法是共通的。总结如下:

1、前序+中序 -> 后序

核心:用前序序列的第一个节点确定当前子树的根节点,用中序序列确定根节点的左子树和右子树

2、中序+后序 -> 前序

核心:用后序序列的最后一个节点确定当前子树的根节点,用中序序列确定根节点的左子树和右子树

发现区别了吗?唯一的区别就是确定根节点时,一个用第一个节点,一个用最后一个节点,别的步骤都一样。

三、举例计算

1、前序+中序 -> 后序

核心:用前序序列的第一个节点确定当前子树的根节点,用中序序列确定根节点的左子树和右子树

前序序列为:ABCDGEIHFJK
中序序列为:DCBGEAHFIJK

1)根据前序序列的第一个节点,首先确定了根节点A;

2)分割左右子树:
根据中序序列 DCBGEAHFIJK,A的左边肯定都是其左子树的值(DCBGE),右边都是其右子树的值(HFIJK)。因为前序遍历肯定先遍历完A的左子树,再去右子树,所以也可以根据这两个元素集合把前序序列划分成两部分:(BCDGE)与(IHFJK),则两个集合的第一个元素B、I 分别是A的左、右孩子(根据前序遍历原则);

在这里插入图片描述 在这里插入图片描述

3)处理左子树:
左:前序(BCDGE),中序(DCBGE)。根据中序,B 的左边是左子树(DC),右边是右子树(GE)。根据前序,左子树(CD),右子树(GE)。

在这里插入图片描述

套娃处理左子树,前序(CD),中序(DC):此子树的根节点一定是前序的第一个节点C,那么根据中序,D就是C的左孩子因为序列中它在C的左边。

在这里插入图片描述

套娃处理右子树,前序(GE),中序(GE):同理,判断出根节点是G,E是G的右孩子。

在这里插入图片描述

4)处理右子树:
右:前序(IHFJK),中序(HFIJK)。根据中序,I 的左边是左子树(HF),右边是右子树(JK)。根据前序,左子树(HF),右子树(JK)。

在这里插入图片描述

套娃处理左子树,前序(HF),中序(HF):根节点H,F是H的右孩子。

在这里插入图片描述

套娃处理右子树,前序(JK),中序(JK):根节点J,K是J的右孩子。

在这里插入图片描述

细心的人就会发现所谓的“嵌套”处理就是递归的过程,不断地去找左右子树的根节点以及左右子树,直至序列为空。可以写成一个程序。

那么最后读一下上面那棵树的后序遍历顺序:DCEGBFHKJIA

2、中序+后序 -> 前序

核心:用后序序列的最后一个节点确定当前子树的根节点,用中序序列确定根节点的左子树和右子树

还是用刚刚的例子
后序:DCEGBFHKJIA
中序:DCBGEAHFIJK

1)根据后序序列的最后一个节点,确定了根节点A;
2)分割左右子树: 一样地根据中序序列,以A为分割点进行分割;
3)处理左子树: 后序:DCEGB,可以确定根节点是B;中序:DCBGE,可以确定左子树DC,右子树GE。
套娃左子树:后序DC,说明根节点是C,中序DC,说明D是C的左孩子。
套娃右子树:后序EG,说明根节点是G,中序GE,说明E是G的右孩子。
4)处理右子树: 后序:FHKJI,可以确定根节点是I,中序:HFIJK,可以确定左子树HF,右子树JK。
套娃左子树:后序FH,说明根节点是H,中序HF,说明F是H的右孩子。
套娃右子树:后序KJ,说明根节点是J,中序JK,说明K是J的右孩子。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge

828华为云征文|华为云Flexus云服务器X实例之openEuler系统部署Docker Compose管理工具Dockge 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、Dockge介绍2.1 Dockge简介2.2 Dockge功能…

华为云DevSecOps和DevOps

目录 1.华为云DevSecOps和DevOps 1.1 DevSecOps 1.1.1 核心功能 1.1.2 优势 1.2 DevOps 1.2.1 核心功能 1.2.2 优势 1.3 DevOps和DevSecOps的区别 1.3.1 安全性集成 1.3.2 自动化的安全工具 1.3.3 团队协作 1.3.4 质量与合规性 1.3.5 成本与风险管理 1.3.5 总结 …

添可2024新品发布会,让智能家电成为“美好家”的具象表达

9月19日,添可以“万物新生,智领美好家”为主题,于上海浦东美术馆举办2024年度新品发布会。 会上,添可凭借对智能家电与家居设计领域的深刻洞察,全新发布了芙万Art Station智能洗地机、芙万Artist洗地机、饮万水纪元净…

《拿下奇怪的前端报错》:npm install卡住了一个钟- 从原理搞定安装的全链路问题

相信前端的小伙伴稍微入行一段时间的,接触过不同的项目,就可能遇到过npm install卡住的情况,下面我就来分析下几种场景、定位的方法和解决办法。不再只是删除node_modules然后重来了,虽然它能解决80%的问题 1 npm install 的原理…

Vue 常用高级指令解析

Vue 高级指令的重要性 Vue 高级指令是一种扩展 Vue.js 框架的功能的方式,可以让你在处理 DOM 元素时具有更多的控制权。它们可以通过自定义指令的方式进行编写和应用。 高级指令的重要性在于,它们使开发者能够通过 Vue 框架来创建更加复杂和灵活的交互…

数据库函数

1.字符串函数 例子: 2.数值函数 例子: 3.日期函数 例子: 4.流程函数 例子: 参考视频:27. 基础-函数-字符串函数_哔哩哔哩_bilibili

FinGPT金融大模型

FinGPT仓库https://github.com/AI4Finance-Foundation/FinGPT 功能: Adviser。根据新闻判断市场情绪(积极、消极、中性),给出投资建议。Quantitative Trading。定制属于自己的金融助手。叫它关注某几个股票、监测消息等。可以直…

Linux安装、Nginx反向代理、负载均衡学习

系列文章目录 第一章 基础知识、数据类型学习 第二章 万年历项目 第三章 代码逻辑训练习题 第四章 方法、数组学习 第五章 图书管理系统项目 第六章 面向对象编程:封装、继承、多态学习 第七章 封装继承多态习题 第八章 常用类、包装类、异常处理机制学习 第九章 集…

代码管理-使用TortoiseGit同步项目到Github/Gitee

1 什么是TortoiseGit TortoiseGit下载地址 TortoiseGit是Git的Windows桌面可视化工具,通过软件的操作来实现Git命令的效果,使所有的操作都能用图形化实现。TortoiseGit安装很简单,这里不对安装流程进行讲解。下载之后即可按照普通软件的方式…

无人机之AI跟踪篇

无人机的AI识别技术依托于计算机视觉和深度学习技术,实现了对目标的快速精准识别,在多个领域展现出了巨大的应用潜力和价值。以下是对无人机AI识别技术的详细解析: 一、无人机AI识别算法的基础原理 无人机AI识别算法主要基于先进的计算机视觉…

使用FLBOOK快速制作3D电子版翻页产品册

​随着数字化时代的到来,传统纸质产品册已逐渐无法满足人们快节奏、便捷的生活方式。而FLBOOK,一款强大的3D电子版翻页产品册制作工具,凭借其简洁的操作界面、丰富的功能和出色的展示效果,已成为越来越多企业的首选。 1.要制作电子…

Ceph官方文档_01_Ceph简介

目录 Ceph介绍Ceph介绍 Ceph可用于向云平台提供Ceph对象存储,Ceph可用于向云平台提供Ceph块设备服务。Ceph可用于部署Ceph文件系统。所有Ceph存储群集部署开始都是先设置每个Ceph节点,然后再设置网络。 Ceph存储集群需要以下内容:至少一个Ceph监视器和至少一个Ceph管理器,…

DA14531开发板原理图设计

一、TYPE-C接口: 二、基于CP2102的USB转UART: 三、UART串口电平转换: 四、扩展接口部分: 五、DA14531蓝牙部分:

【纯小白论文代码带读】医学图像分割MASDF-Net(问题产生及解决)

论文链接:https://www.semanticscholar.org/paper/MASDF-Net%3A-A-Multi-Attention-Codec-Network-with-and-Fu-Deng/6ab609eb93dfd12596032174ca9603712f5c050a 代码链接:https://github.com/Rayicer/TransFuse 初见面代码: Q&am…

多路径文件批量下载工具V1.0.3-支持批量下载文件到单独文件夹的工具-供大家学习研究参考

1、支持批量下载列表文件中的所有文件到每个文件指定的目录下。 2、支持TXT文件导入。 3、支持TXT文件拖入。 4、支持下载错误文件筛选导出。 5、支持单文件多线程下载。 6、其它功能还在开发中。 7、支持断点续传。 8、支持递归下载(递归下载就是按照服务器目录结构…

【资料分析】刷题日记2

第一套 √ 2013-2016一共有13,14,15,16四年,亦即16 - 13 1 4年 √ 是多少倍 ③vs④:都是只给出了年均增速,③求的是其中一年的,无法确定;④求的是这个时段总共的,可…

web - JavaScript

JavaScript 1,JavaScript简介 JavaScript 是一门跨平台、面向对象的脚本语言,而Java语言也是跨平台的、面向对象的语言,只不过Java是编译语言,是需要编译成字节码文件才能运行的;JavaScript是脚本语言,不…

江科大笔记—OLED显示屏

OLED显示屏 OLED的GND接到负极,OLED的VCC接正极,同时也会接到stm32上的PB6和PB7 SCL接PB8 SDA接PB9 在Hardware文件夹里面放3个文件:OLED.c、OLED.h、OLED_Font.h OLED_Font.h:存的是OLED的字库数据,因OLED是不带字库的&#xf…

RK3568平台(网络篇)MAC地址烧录

一.max地址简介 MAC地址(Media Access Control Address)也称为硬件地址或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。在OSI模型中,第二层数据链路层则负责MAC位址 。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都…

Spring3~~~

目录 多例 后置处理器BeanPostProcessor XML配置 通过注解 AOP与后置处理器 JdbcTemplate jdbc.properties jdbc.xml Test 具名参数 DAO 声明式事务 GoodsDao GoodsService xml 传播机制 种类 隔离级别 超时回滚 如果是普通的java项目,xml文件放…