python coding with ChatGPT 打卡第18天| 二叉树:从中序与后序遍历序列构造二叉树、最大二叉树

news2024/9/24 11:30:32

相关推荐
python coding with ChatGPT 打卡第12天| 二叉树:理论基础
python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历
python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历
python coding with ChatGPT 打卡第15天| 二叉树:翻转二叉树、对称二叉树
python coding with ChatGPT 打卡第16天| 二叉树:完全二叉树、平衡二叉树、二叉树的所有路径、左叶子之和
python coding with ChatGPT 打卡第17天| 二叉树:找树左下角的值、路径总和

文章目录

  • 从中序与后序遍历序列构造二叉树
    • Key Points
    • 相关题目
    • 视频讲解
    • 重点分析
    • 拓展
  • 最大二叉树
    • Key Points
    • 相关题目
    • 视频讲解
    • 重点分析

从中序与后序遍历序列构造二叉树

Key Points

  1. 以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来再切后序数组。一层一层切下去,每次后序数组最后一个元素就是节点元素。
  2. 如何使用切割后的后序数组来切合中序数组?利用中序数组大小一定是和后序数组的大小相同这一特点来进行切割。

相关题目

106. 从中序与后序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树

视频讲解

来看看你掉到几次坑

重点分析

在这里插入图片描述

def buildTree(inorder, postorder):
    if not postorder:
        return None
    root = TreeNode(postorder[-1])
    in_root_index = inorder.index(root.val)
    in_left = inorder[:in_root_index]
    in_right = inorder[(in_root_index+1):]
    post_left = postorder[:len(in_left)]
    post_right = postorder[len(in_left):-1]

    root.left = buildTree(in_left, post_left)
    root.right = buildTree(in_right, post_right)
    return root
def buildTree(preorder, inorder):
    if not preorder:
        return None
    
    # 创建根节点
    root = TreeNode(preorder[0])
    
    # 在中序遍历中找到根节点的索引,分割中序遍历
    in_root_index = inorder.index(root.val)
    in_left = inorder[:in_root_index]
    in_right = inorder[in_root_index+1:]
    
    # 分割先序遍历
    pre_left = preorder[1:1+len(in_left)]
    pre_right = preorder[1+len(in_left):] 

    # 递归构建左右子树
    root.left = buildTree(pre_left, in_left)
    root.right = buildTree(pre_right, in_right)

    return root

在这里插入图片描述

拓展

前序和中序可以唯一确定一棵二叉树。
后序和中序可以唯一确定一棵二叉树。
那么前序和后序可不可以唯一确定一棵二叉树呢?

在这里插入图片描述

最大二叉树

Key Points

在这里插入图片描述递归调用如下所示:

  • [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
    • [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
      • 空数组,无子节点。
      • [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
        • 空数组,无子节点。
        • 只有一个元素,所以子节点是一个值为 1 的节点。
    • [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
      • 只有一个元素,所以子节点是一个值为 0 的节点。
      • 空数组,无子节点。

相关题目

654. 最大二叉树

视频讲解

又是构造二叉树

重点分析

def constructMaximumBinaryTree(nums):
    if not nums:
        return None
    root_val = max(nums)
    root = TreeNode(root_val)
    root_index = nums.index(root_val)
    left = nums[:root_index]
    right = nums[root_index+1:]
    root.left = constructMaximumBinaryTree(left)
    root.right = constructMaximumBinaryTree(right)
    return root

在这里插入图片描述

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

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

相关文章

在Visual Studio中引用和链接OpenSceneGraph (OSG) 库

在Visual Studio中引用和链接OpenSceneGraph (OSG) 库,按照以下步骤操作: 构建或安装OSG库 下载OpenSceneGraph源代码(如3.0版本)并解压。使用CMake配置项目,为Visual Studio生成解决方案文件。通常您需要设置CMake中的…

ctfshow-命令执行(web73-web77)

web73 用不了上一题的通用poc了 因为禁用了strlen 但是可以改一个函数自定义一个函数只要是能实现strlen效果即可 cvar_export(scandir(/));exit(0); 根目录下有一个flagc.txt文件 cinclude(/flagc.txt);exit(0); web74 禁用了scandir函数 那就使用web72的glob协议 查看目录下…

Wireshark不显示Thrift协议

使用Wireshark对thrift协议进行抓包,但是只显示了传输层的tcp协议: "右键" -> "Decode As" 选择thrift的tcp端口 将“当前”修改为Thrift,然后点击“确定” 设置后,可以发现Wireshark里面显示的协议从Tcp变…

【每日一题】LeetCode——链表的中间结点

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有…

Unity3d Shader篇(五)— Phong片元高光反射着色器

文章目录 前言一、Phong片元高光反射着色器是什么?1. Phong片元高光反射着色器的工作原理2. Phong片元高光反射着色器的优缺点优点缺点 二、使用步骤1. Shader 属性定义2. SubShader 设置3. 渲染 Pass4. 定义结构体和顶点着色器函数5. 片元着色器函数 三、效果四、总…

vue对于安装依赖时不好习惯的反省

因为一个不好的习惯,我总是喜欢–save去安装依赖包,然后发现最后打包后的内容总是很大。就想着怎么能让包小一些,就发现我遗漏了vue安装依赖的一个小知识点 安装依赖的时候可以-s -d -g去安装,要根据使用的内容选择去安装&#xf…

第一个 Angular 项目 - 静态页面

第一个 Angular 项目 - 静态页面 之前的笔记: [Angular 基础] - Angular 渲染过程 & 组件的创建 [Angular 基础] - 数据绑定(databinding) [Angular 基础] - 指令(directives) 这是在学完了上面这三个内容后能够完成的项目,目前因为还没有学到数…

【漏洞复现】多语言药房管理系统MPMS文件上传漏洞

Nx01 产品简介 多语言药房管理系统 (MPMS) 是用 PHP 和 MySQL 开发的, 该软件的主要目的是在药房和客户之间提供一套接口,客户是该软件的主要用户。该软件有助于为药房业务创建一个综合数据库,并根据到期、产品等各种参数提供各种报告。 Nx02 漏洞描述 …

【服务器数据恢复】HP EVA虚拟化磁盘阵列数据恢复原理方案

EVA存储结构&原理: EVA是虚拟化存储,在工作过程中,EVA存储中的数据会不断地迁移,再加上运行在EVA上的应用都比较繁重,磁盘负载高,很容易出现故障。EVA是通过大量磁盘的冗余空间和故障后rss冗余磁盘动态…

笔记---dp---数字三角形模型

所谓数字三角形模型,即是从数字三角形这一题衍生出来的 题目为经典题目,不再赘述,此笔记根据AcWing算法提高课来进行对数字三角形模型衍生例题的记录 题目关系如下(见AcWing里的AcSaber): AcWing.1015.摘…

Nature Machine Intelligence 使用机器学习驱动的可拉伸智能纺织手套捕捉复杂的手部动作和物体交互

研究背景 对灵巧手运动的精确实时跟踪在人机交互、元宇宙、机器人和远程医疗等领域有着广泛的应用。当前的可穿戴设备中的大多数仅用于检测精度有限的特定手势,并且没有解决与设备的可靠性、准确性和可清洗相关的挑战。对传感器直接放置在用户的手上有严格的要求&am…

自然人如何代开发票

1:登录国家税务总局深圳市电子税务局 地址:国家税务总局深圳市电子税务局 2:个人所得税APP 扫描登录 或 身份证登录 3:选择 自然人代开增值税电子普通发票 4:申请代开 5:人脸识别 6:画框的…

Ubuntu20.04更新Cmake版本详解

最近在跑一个融合惯导定位的slam框架ins_eskf_kitti,在框架的安装过程中,需要对从GitHub上克隆下来的glog进行编译。其命令如下: glog: git clone https://github.com/google/glog.git cd glog mkdir build cd build cmake .. m…

1分钟搞定面试——Activity与Fragment生命周期

目录 1.Activity与Fragment启动 2.Fragment之间的切换 2.1 使用add() 2.2 使用replace() 3.带Fragment_A的MainActivity切换到SecondActivity,再返回到MainActivity 4.带有Fragment_B的SecondActivity返回到MainActivity 5.详细谈谈生命周期中各方法 因为Fra…

c#读取csv文件中的某一列的数据

chat8 (chat779.com) 上面试GPT-3.5,很好的浏览网站,输入问题,可得到答案。 问题1:c#如何在csv中读取某一列数据 解答方案:在 C#中,你可以使用File.ReadAllLines来读取CSV中的所有行,然后逐行解析每一行…

HCIA-HarmonyOS设备开发认证V2.0-3.轻量系统内核基础

目录 一、前言二、LiteOS-M系统概述三、内核框架3.1、CMSIS 和 POSIX 整体架构3.2、LiteOS-M内核启动流程 四、内核基础4.1、任务管理4.2、时间管理(待续)4.3、中断管理(待续)4.4、软件定时器(待续) 五、内存管理5.1、静态内存(待续)5.2、动态内存(待续) 六、内核通信机制6.1、…

深度学习(15)--PyTorch构建卷积神经网络

目录 一.PyTorch构建卷积神经网络(CNN)详细流程 二.graphviz torchviz使PyTorch网络可视化 2.1.可视化经典网络vgg16 2.2.可视化自己定义的网络 一.PyTorch构建卷积神经网络(CNN)详细流程 卷积神经网络(Convolutional Neural Networks)是一种深度学…

每日一题 力扣993.二叉树的堂兄弟节点

993. 二叉树的堂兄弟节点 题目描述: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k1 处。 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。 我们给出了具有唯一值…

实现RBAC

一、菜单权限的控制 左边侧边栏的菜单显示是来自于userlnfoStore.menuRoutes,当前进行打印,得到的内容其实就是staticRoutes静态路由表定义的路由数组对象;最终staticRoutes(静态路由)、allAsyncRoutes(动态路由)、anyRoute(任意路由)需要进行一次整合、…

spring boot和spring cloud项目中配置文件application和bootstrap中的值与对应的配置类绑定处理

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136065211 加载完文件转换为 Environment 中对应的值之后,接下来需要将对应的值与对应的配置类进行绑定,方便对应的组件取值处理接下来的操作。 对应的配置值与配置类绑定通过 Con…