码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 算法通关村第六关—序列恢复二叉树(青铜)


          根据序列恢复二叉树

    示例

    给定序列恢复二叉树
    (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
    • 2

    有中序的划分可知
    根结点: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,但是中间是怎么划分的呢?其他元素哪些属于左子树,哪些属于右子树呢?很明显通过两个序列都不知道,所以前序和后序序列不能恢复二叉树。

  • 相关阅读:
    Java工程师进阶知识完全扫盲, 太全了!!
    基于HTML+CSS+JavaScript+Bootstarp响应式健身网站(web前端期末大作业)
    《架构风清扬-Java面试系列第26讲》聊聊的LinkedBlockingQueue的特点及使用场景
    httprunner4学习总结1 - 相关概念
    Flutter 使用FFI+CustomPainter实现全平台渲染视频
    亚马逊暖风机CE认证UL报告办理周期费用
    macos (M2芯片)搭建flutter环境
    从实际需求方案整理记录分布式锁的使用
    squidpy 安装 pip install SpatialDE -i https://pypi.tuna.tsinghua.edu.cn/simple spatial
    今日来介绍关于淘宝相似商品搜索的API接口
  • 原文地址:https://blog.csdn.net/m0_73709096/article/details/134721221
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号