算法通关村第六关—序列恢复二叉树(青铜)

news2024/9/21 0:34:13

      根据序列恢复二叉树

示例

给定序列恢复二叉树
(1)前序:1 2 3 4 5 6 8 7 9 10 11 12 13 15 14
(2)中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12
3)后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1

一、前中序列恢复二叉树

(1)前序:1 2 3 4 5 6 8 7 9 10 11 12 13 15 14
(2)中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12
我们知道前序第一个访问的就是根节点,所以根节点就是1。
中序遍历的特点是根节点的左子树的元素都在根节点的左侧,右子树的元素都在根节点的右侧,从中序遍历序列我们可以划分成如下结构:
截屏2023-11-30 20.11.13.png
此时由中序序列可知
根结点:1
左子树:3 4 8 6 7 5 2
右子树:10 9 11 15 13 14 12
截屏2023-11-30 20.15.06.png
然后对划分出的两个子树按照前面的步骤继续划分
如左子树
前序序列:2 3 4 5 6 8 7
中序序列:3 4 8 6 7 5 2
根据前序的根结点2对中序序列进行划分
截屏2023-11-30 20.20.25.png
由中序序列可知
根结点:2
左子树: 3 4 8 6 7 5
右子树:空
截屏2023-11-30 20.20.25.png
最终经过多轮划分,最终二叉树的结构如下截屏2023-11-30 20.25.06.png

二、中后序列恢复二叉树

(2)中序:3 4 8 6 7 5 2 1 10 9 11 15 13 14 12
3)后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1
与前中序列恢复二叉树类似,只是此时根结点在后序序列的末尾,即1。然后根据1对中序序列进行划分,可得

中序:[3 4 8 6 7 5 2] 1 [10 9 11 15 13 14 12]
后序:[8 7 6 5 4 3 2] [10 15 14 13 12 11 9] 1

有中序的划分可知
根结点:1
左子树:3 4 8 6 7 5 2
右子树:10 9 11 15 13 14 12

三、注意

既然上面两种都行,那为什么前序和后序不行呢?看上面的例子:
(1)前序:1 2 3 4 5 6 8 7 9 10 11 12 13 15 14
(2)后序:8 7 6 5 4 3 2 10 15 14 13 12 11 9 1
根据上面的说明,我们通过前序可以知道根节点是1,通过后序也能知道根节点是1,但是中间是怎么划分的呢?其他元素哪些属于左子树,哪些属于右子树呢?很明显通过两个序列都不知道,所以前序和后序序列不能恢复二叉树。

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

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

相关文章

python 交互模式和命令行模式的问题

python 模式的冲突 unexpected character after line continuation character 理论上 ide里,输入 python 文件路径\文件.py 就可以执行 但是有时候却报错 unexpected character after line continuation character 出现上述错误的原因是没有退出解释器&#x…

Echarts 大屏注册自定义地图解析文件流报错以及坐标显示数值和地图填充以及dataV轮播数据不显示问题解决

效果图: 1、第一种方式 后台接口获取到SVG图片的文件流,postman能够正确解析出文件流,前端调用api时需要设置返回的响应格式为image/svg+xml格式,否则解析失败 拿到文件流后是这样的 <?xml version="1.0" encoding="utf-8"?> <!-- Generato…

记录 | onnx-simplifier安装、使用

安装&#xff1a; pip install onnx-simplifier# 若想加速 # [可选] 使用豆瓣源加速 pip install -i https://pypi.douban.com/simple onnx-simplifier# [可选] 使用阿里源加速 pip install -i http://mirrors.aliyun.com/pypi/simple onnx-simplifier使用&#xff1a; pytho…

俄罗斯方块小游戏开发

代码图&#xff1a; import pygame, randompygame.init()# 游戏界面参数 width 300 height 600 surface pygame.display.set_mode((width, height))# 颜色定义 black (0, 0, 0) white (255, 255, 255) red (200, 0, 0) green (0, 200, 0) blue (0, 0, 200)# 俄罗斯方块…

iview弹窗提交问题优化

如上图所示 有时候在弹窗中 有比较复杂的表格组件数据 这时候 你如果把提交按钮直接放在弹窗上 就会很麻烦 不仅要处理表格的验证 同时也要维护弹窗的开启和关闭状态 不是很自由 这时候 就看见把提交按钮单独摘出来 可以在自建的按钮上 判断各种状态 是不是很方便呢

Navicat连接Oracle数据库记录

oracle服务如图&#xff1a; navicat连接设置&#xff1a; 测试连接成功&#xff01; 连接创建成功&#xff01;

dubbo发送接收

consumer 主要使用ThreadlessExecutor实现全consumer的全双工通讯。consumer创建本次请求的requestId用于将response和request匹配。 然后分以下几步完成一次请求发送并接收结果&#xff1a; 槽&#xff1a;发送消息前将用于接收结果的executor放到一个map中存储 发送消息&…

三季度利空出尽,金山软件即将“破茧”?

引言&#xff1a;近日&#xff0c;金山软件&#xff08;以下简称为“金山”&#xff09;披露了2023Q3 季报&#xff0c;AI业绩首次兑现如约而至&#xff0c;而伴随着全球AI商业化进程加速&#xff0c;作为国产办公软件领军企业的金山软件是否也迎来了新的盈利风口期&#xff1f…

论文学习-Bert 和GPT 有什么区别?

Foundation Models, Transformers, BERT and GPT 总结一下&#xff1a; Bert 是学习向量表征&#xff0c;让句子中某个词的Embedding关联到句子中其他重要词。最终学习下来&#xff0c;就是词向量的表征。这也是为什么Bert很容易用到下游任务&#xff0c;在做下游任务的时候&a…

Windows核心编程 HOOK

目录 HOOK概述 HOOK API SetWindowsHookExA 函数(winuser.h) UnhookWindowsHookEx 函数(winuser.h) NextHookEx 函数(winuser.h) 局部钩子 全局钩子 为什么全局钩子需要用dll作为过程函数&#xff1f; HOOK概述 本质&#xff1a;Windows消系统的消息过滤器。 全局钩子…

如何提高3D建模技能?

无论是制作影视动画还是视频游戏&#xff0c;提高3D建模技能对于你的工作都至关重要的。那么如何能创建出精美的3D模型呢&#xff1f;本文给大家一些3D建模技能方面的建议。 3D建模通过专门的软件完成&#xff0c;涉及制作三维对象。这项技能在视频游戏开发、建筑、动画和产品…

电商物流信息查询难?一招解决

在当今的电商时代&#xff0c;物流信息查询一直是电商行业的痛点。很多电商商家在处理大量快递订单时&#xff0c;经常需要手动一个个查询快递信息&#xff0c;不仅耗时而且耗力。为了解决这个问题&#xff0c;我们可以使用固乔快递查询助手&#xff0c;它可以帮助我们快速批量…

redis单机版本安装

redis单机版本安装 1.redis单机版源码编译安装搭建(4.0示例) redis下载地址 https://redis.io/download redis源码编译 #!/bin/sh yum install -y wget gcc gcc-c make tar openssl openssl-devel cmakecd /usr/local/src wget http://download.redis.io/releases/redis-4…

什么是Anaconda?作用是?使用python必须要安装嘛?

一、什么是Anaconda以及其作用&#xff1f; 通俗来讲&#xff0c;Anaconda算是一个环境容器&#xff0c;也可以叫环境管理器。 作用&#xff1a;可以在Anaconda容器中为python项目创建不同的环境。在各个不同环境中可以安装不同版本的包并且各个环境互不影响。可以在使用不同项…

Maven的安装和使用

Maven是一个基于项目对象模型&#xff08;POM&#xff09;&#xff0c;可以管理项目构建、依赖管理、项目报告等的工具&#xff0c;使构建Java项目更容易。可以说Maven是一个项目管理和构建工具&#xff0c;它可以从管理项目的角度出发&#xff0c;将开发过程中的需求纳入进来&…

微信小程序 slider 翻转最大和最小值

微信小程序 slider 翻转最大和最小值 场景代码示例index.wxmlindex.jsutil.js 参考资料 场景 我想使用 slider 时最左边是 10 最右是 -10。 但是想当然的直接改成<slider min"10" max"-10" step"1" /> 并没用。 查了文档和社区也没有现成…

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(3)》(16)

《Linux操作系统原理分析之存储管理&#xff08;3&#xff09;》&#xff08;16&#xff09; 5 存储管理5.6 分段存储管理&#xff08;1&#xff09; 地址结构&#xff08;2&#xff09; 段表&#xff08;3&#xff09; 地址变换机构&#xff08;4&#xff09; 存储共享&#x…

自动化测试理论

一、初识自动化测试 概念 软件测试的定义 在规定的条件下对程序进行操作&#xff0c;以发现程序错误&#xff0c;衡量软件质量&#xff0c;并对其是否能满足设计要求进行评估的过程。 自动化测试的定义 把人对软件的测试行为转化为由机器执行测试行为的一种实践&#xff0…

芯片技术探索:了解构芯片的设计与制造之旅

芯片技术探索:了解构芯片的设计与制造之旅 一、引言 随着现代科技的飞速发展,芯片作为信息技术的核心,已经渗透到我们生活的方方面面。从智能手机、电视、汽车到医疗设备和工业控制系统,芯片在各个领域都发挥着至关重要的作用。然而,对于大多数人来说,芯片仍然是一个神秘…

【Flink进阶】-- Flink kubernetes operator 快速入门与实战

1、课程目录 2、课程链接 https://edu.csdn.net/course/detail/38831