[二叉树] 二叉树的前中后三序遍历#知二求一

news2025/1/12 3:52:41

标题:[二叉树] 二叉树的前中后三序遍历#知二求一

@水墨不写bug

(图片来源于网络) 


 正文开始:

        其实这一类题就是考察对二叉树的结构理解,此类题目的二叉树一般通过数组传入,我们只需根据二叉树的就够特点对数组进行分区即可,其实这也是一个看递归的一个全新的视角,即将数组递归的分为 “根” “左区间” “右区间”,这一过程生动诠释了递归的特色。

        对于传入的数组,将其分为根,左区间,右区间。其中,左区间代表左子树,右区间代表右子树。

从整体上来说:

前序遍历分为:根——左区间——右区间;(根——左区间——右区间)

中序遍历分为:左区间——根——右区间;(左子树——根——右子树)

后序遍历分为:左区间——右区间——根;(左子树——右子树——根)

(一)知前序中序求后序(前+中->后)

        (1)已知某二叉树的前序遍历序列为5 7 4 9 6 2 1,中序遍历序列为4 7 5 6 9 1 2,则其后序遍历序列为( )

思路:

抓住前序三序遍历的特点:

        前序遍历的首元素就是二叉树的根;

        中序遍历的根的左右区间分别就是左子树和右子树;

        后序遍历的最后一个元素就是二叉树的根;

总结:

        前序和后序是用来获得根的,中序是用来根据根的相对位置来分别区分出左右区间(左右字数的);

 

接下来再通过解决例题(1)来验证一下结论:

        通过前序遍历找到子树的根,在中序遍历中找到根的位置,然后确定根左右子树的区间,即根的左侧为左子树中所有节点,根的右侧为右子树中所有节点。

故:根为: 5

        5的左子树:4 7   5的右子树: 6 9  1  2

        5的左子树的根为: 7  5的右子树的根为:9

        7的左子树: 4 7的右:空  9的左子树:6  9的右子树:2

故这棵树的结构为:

(二)知前序后序求中序(前+后->中)

        仅通过二叉树的前序遍历和后序遍历,我们不能唯一地确定一个二叉树的中序遍历结果,因为存在多种可能的二叉树结构满足相同的前序和后序遍历结果。

        前序遍历的顺序是:根节点 -> 左子树 -> 右子树
        后序遍历的顺序是:左子树 -> 右子树 -> 根节点

        但是,没有中序遍历(左子树 -> 根节点 -> 右子树)的信息,我们就无法准确地知道左子树和右子树各包含哪些节点,特别是当节点值可以重复时。

        然而,如果我们知道二叉树是满二叉树(每个节点都有两个子节点)或者是完全二叉树(除最后一层外,其他层都是满的,并且最后一层的节点都靠左排列),并且节点值不重复,那么在某些特定情况下,我们可能可以推断出中序遍历的结果。但这不是一般情况下的解决方案。

        对于一般情况,如果我们需要从前序和后序遍历中恢复二叉树(或中序遍历),我们需要额外的信息或使用更复杂的算法,如基于树的重建算法,但这通常涉及到递归的猜测和验证过程,且不一定总是可行的。

        所以,简单地说,仅通过前序和后序遍历,我们不能直接求出中序遍历的结果。

如果你对这一结论感兴趣,可以参考这篇文章来深入探究:

【数据结构与算法】"先序+后序"能否确定二叉树结构?一个简单的判别法 - 知乎 (zhihu.com)

(三)知中序后序求前序(中+后->前)

        已知某二叉树的中序遍历序列为JGDHKBAELIMCF,后序遍历序列为JGKHDBLMIEFCA,则其前序遍历序列为( )

        由后序遍历确定子树的根,后序遍历从后向前看,最后一个元素为根,和前序遍历刚好相反,从后向前看后序遍历,应该是根,右,左,根据中序遍历确定子树的左右区间

故:根为: A

        A的左子树:JGDHKB       A的右子树:ELIMCF

        A的左子树的根:B            A的右子树的根:C

        B的左子树:JGDHK  B的右子树:空  C的左子树:ELIM C的右子树:F

        B的左子树的根:D         C的左子树根:E

        D的左子树的根:G   D的右子树的根:H       E的右子树的根:I

故树的结构为:

 


完~

未经作者同意禁止转载 

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

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

相关文章

今日科普:认识颅脑肿瘤

颅脑肿瘤,这个医学名词常常令人心生畏惧,但其实它是指发生在大脑、小脑、脑膜等部位的肿瘤。这些肿瘤可能源于颅内组织,也可能是由身体其他部位的肿瘤转移而来。令人欣慰的是,并非所有颅内肿瘤都是恶性的,良性肿瘤和恶…

windows浅尝NW.js

windows浅尝NW.js 在本指南中,我们将详细介绍如何在windows上部署NW.js,实现应用的构成、启动方式、开发环境 环境部署 首先我们需要从官网下载对应的压缩包 (https://nwjs.io/downloads/) 下载完成后解压,可以看到对应的文件目录 然后我们运行目录下…

【LangChain系列 12】Prompt模版——序列化

本文速读: PromptTemplate FewShotPromptTemplate 通常prompt以文件形式存储比python代码更好,一方面可以更容易共享、存储。本文将介绍在LangChain中如何对prompt以不同的方式序列化。 一般来说,对于序列化有以下两个设计原则&#xff1a…

牛客热题:合并K个升序链表

📟作者主页:慢热的陕西人 🌴专栏链接:力扣刷题日记 📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言 文章目录 牛客热题:合并K个升序链表题目链接&#…

周三多《管理学原理》第3版/考研真题/章节练习题

普通高等教育“十一五”国家级规划教材《管理学原理》(第3版,周三多、陈传明、龙静编著,南京大学出版社)是我国高校广泛采用的管理学权威教材之一,也被众多高校(包括科研机构)指定为考研考博专业…

开源医疗大模型排行榜: 健康领域大模型基准测试

开源医疗大模型排行榜: 健康领域大模型基准测试 文章目录 开源医疗大模型排行榜: 健康领域大模型基准测试一、引言二、数据集、任务和评估设置1、MedQA2、MedMCQA3、PubMedQA4、MMLU 子集 (医学和生物学) 三、洞察与分析四、提交你的模型以供评估五、下一步是什么?扩…

node.js 解析post请求 方法二

前提:以前面发的node.js解析post请求方法一为模板,具体见 http://t.csdnimg.cn/ABaIn 此文我们运用第二种方法:使用第三方模块formidable对post请求进行解析。 1》代码难点 *** 在Node.js中使用formidable模块来解析POST请求主要涉及到处理…

74、堆-数组中的第K个最大元素

思路&#xff1a; 直接排序是可以的&#xff0c;但是时间复杂度不符合。可以使用优先队列&#xff0c;代码如下&#xff1a; class Solution {public int findKthLargest(int[] nums, int k) {if (numsnull||nums.length0||k<0||k>nums.length){return Integer.MAX_VAL…

网工内推 | 互联网大厂百度、虎牙项目管理岗,15薪,PMP认证优先

01 百度在线 招聘岗位&#xff1a;商业项目管理组_项目管理 职责描述&#xff1a; 1. 商业部核心项目管理工作&#xff0c;主导制定项目目标、计划&#xff0c;推进项目实施及交付&#xff0c;有效管控项目进度、成本、质量、风险等 2. 商业技术/业务创新氛围建设&#xff0c;…

SQL底层执行过程

MySQL 的查询流程 客户端请求连接器 负责与客户端的通信,是半双工模式&#xff08;半双工(Half Duplex)数据传输指数据可以在一个信号载体的两个方向上传输,但是不能同时传输。&#xff09;&#xff0c;验证请求用户的账户和密码是否正确&#xff0c;③如果用户的账户和密码验…

Linux基础——Linux开发工具(下)_make/makefile

前言&#xff1a;在经过前面两篇学习&#xff0c;大家对Linux开发工具都有一定的了解&#xff0c;而在此之前最重要的两个工具就是vim&#xff0c;gcc。 如果对这两个工具不太了解&#xff0c;可以先阅读这两篇文章&#xff1a; Linux开发工具 (vim) Linux开发工具 (gcc/g) 首先…

跟TED演讲学英文:Innovating to zero! by Bill Gates

Innovating to zero! Link: https://www.ted.com/talks/bill_gates_innovating_to_zero Speaker: Bill Gates Date: February 2010 文章目录 Innovating to zero!IntroductionVocabularyTranscriptQ&A with Chris AndersonSummary后记 Introduction At TED2010, Bill Ga…

.NET C# ORM 瀚高数据库

SqlSugar ORM SqlSugar 是一款 老牌 .NET开源ORM框架&#xff0c;由果糖大数据科技团队维护和更新 &#xff0c;开箱即用最易上手的ORM 优点 &#xff1a;【生态丰富】【高性能】【超简单】 【功能全面】 【多库兼容】【适合产品】 【SqlSugar视频教程】 支持 &#xff1a…

判断字符串由几个单词组成(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int world 0;int i 0;char c 0;char string[81] { 0 };int num 0;//提示用户&#xff…

一个docker配置mysql主从服务器

这也就是因为穷&#xff0c;不然谁用一个docker配置主从&#xff0c;哈哈 既然成功了就记录下。过程挺折磨人的。 首先要保证你的电脑安装好了docker 为了保证docker当中主从能正常连网&#xff0c;现在docker里面创建一个网络环境 docker network create --driver bridge mysq…

C++-9

C 1.已知C风格的字符串&#xff0c;完成对字符串通过下标访问时的异常处理机制(越界访问) 2.写一个程序&#xff0c;程序包含两个类&#xff0c;类中实现一个成员函数&#xff0c;MyGetChar(), 类A中每调用一 次&#xff0c;按顺序得到一个数字字符&#xff0c;比如第-次调用得…

社交论坛问答发帖系统源码-java+vue+uniapp开发前后端

源码说明&#xff1a; 前后端分离社交论坛问答发帖BBS源码&#xff0c;社交论坛小程序|H5论坛。 下 载 地 址 &#xff1a; runruncode.com/php/19462.html 该项目是一个使用Java、Vue和Uniapp开发的前后端分离的社交论坛问答发帖/BBS项目。它包括了论坛图文帖、视频、圈子…

新唐的nuc980/nuc972的开发1-环境和源码同步

开发环境安装 1.1更新源 服务器端&#xff1a;可以参考&#xff1a;Linux替换清华源_更改清华源-CSDN博客 下面是桌面端的方法&#xff1a; 打开系统的软件中心&#xff0c;选择自己想要使用的源 更新缓存 1.2安装必须的库 apt-get install patch apt-get install libc6-dev …

SQL提升

1. SQL TOP 子句 TOP 子句用于规定要返回的记录的数目。 对于拥有数千条记录的大型表来说&#xff0c;TOP 子句是非常有用的。 **注释&#xff1a;**并非所有的数据库系统都支持 TOP 子句。 1.1 SQL TOP 语法 SQL Server 的语法&#xff1a; SELECT TOP number|percent c…

C#基础|了解对象在程序中的状态及垃圾回收机制

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 本节了解对象的生命周期及对象状态和垃圾回收机制&#xff0c;以下为学习笔记。 1、对象的生命周期 对象在内存中不断地被引用&#xff0c;被释放&#xff0c;形成了类似生命周期的过程。 2、对象在内存中的状态 对…