当前位置: 首页 > article >正文

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

创作日志: 笔试题目,掌握了技巧之后这道题就是 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.kler.cn/news/311354.html

相关文章:

  • 我的demo保卫萝卜中的技术要点
  • O1-preview:智能预测与预取驱动的性能优化处理器设计OPEN AI
  • Semaphore UI --Ansible webui
  • 心觉:成功学就像一把刀,有什么作用关键在于使用者(二)
  • 进入C++
  • Spring WebFlux实践与源码解析
  • leetcode41. 缺失的第一个正数,原地哈希表
  • Vue2篇
  • 无线感知会议系列【2】【智能无感感知 特征,算法,数据集】
  • 【AI大模型】LLM主流开源大模型介绍
  • 【neo4j】neo4j和Cypher 查询语言相关知识点
  • 【Python】 报错Can‘t find model ‘en_core_web_md‘
  • jmeter吞吐量控制器
  • 大数据新视界 --大数据大厂之SaaS模式下的大数据应用:创新与变革
  • 前端框架对比和选择
  • MiniCPM3-4B | 笔记本电脑运行端侧大模型OpenBMB/MiniCPM3-4B-GPTQ-Int4量化版 | PyCharm环境
  • Redis---卸载Redis
  • Basler 相机与LabVIEW进行集成
  • linux 自动清除日志 脚本
  • 828华为云征文 | 深度评测,华为云Flexus X实例在Sysbench性能测试中的亮眼表现
  • shell常用命令
  • Python开发深度学习常见安装包 error 解决
  • Redis 配置
  • AI绘画与摄影新纪元:ChatGPT+Midjourney+文心一格 共绘梦幻世界
  • CSP-J 算法基础 快速排序
  • 初写MySQL四张表:(3/4)
  • 八股文-JVM
  • 黑马程序员Java笔记整理(day01)
  • 用idea编写并运行第一个spark scala处理程序
  • RK3568平台(网络篇)MAC地址烧录