代码随想录算法训练营第17天—二叉树06 | ● *654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● *98.验证二叉搜索树

*654.最大二叉树

题目链接/文章讲解:https://programmercarl.com/0654.%E6%9C%80%E5%A4%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV1MG411G7ox

  • 考点
    • 前序遍历
    • 构建二叉树
  • 我的思路
    • 参考了力扣题目里的提示
    • 递归三要素
      • 形参:数值列表;返回值,当前节点
      • 退出条件:若数值列表为空,返回None
      • 递归逻辑
        • 对数值列表求最大值,并基于最大值创建当前节点
        • 利用最大值的索引切割数值列表,并以切割得到的左数值列表作为参数执行左递归生成左子树
        • 利用最大值的索引切割数值列表,并以切割得到的右数值列表作为参数执行右递归生成右子树
  • 视频讲解关键点总结
    • 和我的思路一致
    • 二叉树构造类型的问题要使用前序遍历,先构建中间节点
  • 我的思路的问题
  • 代码书写问题
  • 可执行代码
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:if not nums:return Noneindex = 0max_value = -1for i in range(len(nums)):if nums[i] > max_value:max_value = nums[i]index = iroot = TreeNode(max_value)root.left = self.constructMaximumBinaryTree(nums[:index])root.right = self.constructMaximumBinaryTree(nums[index + 1:])return root

617.合并二叉树

题目链接/文章讲解:https://programmercarl.com/0617.%E5%90%88%E5%B9%B6%E4%BA%8C%E5%8F%89%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV1m14y1Y7JK

  • 考点
    • 前序遍历
    • 二叉树构建
  • 我的思路
    • 递归三要素
      • 形参:两棵树的当前节点;返回值为新树的当前节点
      • 退出条件:如果两棵树的当前节点均为空,则返回None
      • 递归逻辑
        • 由于本题当两个二叉树节点状态不同,执行的逻辑会不同,因此接着退出条件的if继续写
        • elif,1号二叉树节点为空,2号不为空,则当前节点基于2号树节点创建,同时执行左右递归(1号二叉树的位置直接放None)生成当前节点的左右节点
        • elif,2号二叉树节点为空,1号不为空,则当前节点基于1号树节点创建,同时执行左右递归(2号二叉树的位置直接放None)生成当前节点的左右节点
        • else,1号2号都不为空,则当前节点基于二者和创建,同时执行左右递归生成当前节点的左右节点
        • 返回当前节点
  • 视频讲解关键点总结
    • 可以对上述思路进行优化
    • 对于退出条件和两个elif判断,可优化为,依次判断1号树节点和2号树节点是否为空,如果1号为空,直接返回2号节点,如果2号为空,直接返回1号节点(因为2者中一旦其一为空,则其后续也为空,此时新树的后续节点和老树里不为空的那个完全一致)
  • 我的思路的问题
    • 可优化逻辑,优化思路见上
  • 代码书写问题
  • 可执行代码
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1:return root2if not root2:return root1root = TreeNode(root1.val + root2.val)root.left = self.mergeTrees(root1.left, root2.left)root.right = self.mergeTrees(root1.right, root2.right)return root

700.二叉搜索树中的搜索

题目链接/文章讲解: https://programmercarl.com/0700.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E4%B8%AD%E7%9A%84%E6%90%9C%E7%B4%A2.html
视频讲解:https://www.bilibili.com/video/BV1wG411g7sF

  • 考点
    • 二叉搜索树的性质
    • 二叉树遍历
  • 我的思路
    • 直接进行搜索,未利用二叉搜索树的性质
  • 视频讲解关键点总结
    • 利用二叉搜索树的性质
    • 在递归逻辑里,当val大于当前节点的值时,向右子树搜索,小于时,向左子树搜索
  • 我的思路的问题
    • 为考虑二叉搜索树的性质
  • 代码书写问题
  • 可执行代码
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:if root is None:return Noneif root.val == val:return rootif root.val > val:return self.searchBST(root.left, val)else:return self.searchBST(root.right, val)

*98.验证二叉搜索树

题目链接/文章讲解:https://programmercarl.com/0098.%E9%AA%8C%E8%AF%81%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91.html
视频讲解:https://www.bilibili.com/video/BV18P411n7Q4

  • 考点
    • 二叉搜索树的特性
    • 中序遍历
    • 双指针
  • 我的思路
    • 思路较为混乱
  • 视频讲解关键点总结
    • 利用中序遍历和二叉搜索树的特性,把题目简化为只需要判断前序遍历过程中前后两个节点是否是后者大于前者即可
    • 一种做法是定义一个额外的数组,在中序遍历的过程中把所有的值加到数组中,之后判断数组是否是个递增数组
    • 第二种做法是在递归过程中维护一个表示上一节点值的变量,并在每次递归时把当前节点与其相比
    • 第三种做法是双指针,一个指针指向上一节点,另一指针为当前节点
      • 给Solution类初始化一个pre指针
      • 递归三要素
        • 形参:当前节点;返回值为True或False
        • 退出条件:若当前节点为空,return True(因为如果是空二叉树也是二叉搜索树)
        • 递归逻辑
          • 中序遍历
          • (左)左递归并接收其返回值
          • (中)如果pre指针不为空且当前节点的值小于等于之前指针的值,return False;否则把当前节点赋给pre指针
          • (右)右递归并接收其返回值
          • 如果左右递归返回值都为True,则返回True,否则返回False
  • 我的思路的问题
    • 无思路
  • 代码书写问题
  • 可执行代码
class Solution:def __init__(self):self.pre = Nonedef isValidBST(self, root: Optional[TreeNode]) -> bool:if root is None:return Trueleft = self.isValidBST(root.left)if self.pre is not None and self.pre.val >= root.val:return Falseelse:self.pre = rootright = self.isValidBST(root.right)return left and right

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

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

相关文章

【大数据面试题】008 谈一谈 Flink资源如何配置

【大数据面试题】008 谈一谈 Flink 资源如何配置 并行度 Parallelism 概念作用Slot 概念作用如何设置TaskManager 任务管理器Flink submit 脚本 一步一个脚印,一天一道面试题 该文章有较多引用文章 https://zhuanlan.zhihu.com/p/572170629?utm_id0 并行度 Paralle…

Unity2023.1.19没有PBR Graph?

Unity2023.1.19没有PBR Graph? 关于Unity2023.1.19没有PBR graph的说法,我没看见管方给出的答案,百度则提到了Unity2020版之后Shader Graph的“全新更新”,之前也没太注意版本的区别,以后项目尽量都留心一下。 之前文章说过,孪生智慧项目推荐使用URP渲染管线,以上的截…

安装sklearn遇到ImportError: dlopen: cannot load any more object with static TLS

1.看https://blog.csdn.net/Go_ahead_forever/article/details/133755918 知不能 pip install sklearn,而是 pip install scikit-learn2.网上说调换import的顺序就能解决。 但是我不知道调换哪个,索性重新开了anaconda环境,一个个安装缺什么…

Stable Diffusion 绘画入门教程(webui)-ControlNet(线稿约束)

上篇文章介绍了openpose,本篇文章介绍下线稿约束,关于线稿约束有好几个处理器都属于此类型,但是有一些区别。 包含: 1、Canny(硬边缘):识别线条比较多比较细,一般用于更大程度得还原照片 2、ML…

在docker中运行vins-fusion

文章目录 VINS-fusion拉取镜像创建容器在vscode中运行代码运行效果VINS-fusion VINS-Fusion 是一个开源的实时多传感器状态估计库,主要由香港科技大学的沈邵劼教授领导的研究团队开发。它是 VINS-Mono(单目视觉惯性系统)的扩展,支持多种传感器组合,如双目、立体相机和IMU…

Spring Security 认证授权安全框架

Spring Security概述 1.什么是Spring Security? Spring Security是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security基于过滤器链的概念,可以轻松地集成到任…

指针笔试题(C语言进阶)

目录 前言 1、案例一 1.1 答案 1.2 解析 2、案例二 2.1 答案 2.2 解析 3、案例三 3.1 答案 3.2 解析 4、案例四 4.1 答案 4.2 解析 5、案例五 5.1 答案 5.2 解析 总结 前言 “纸上得来终觉浅,绝知此事要躬行”。本篇通过对指针实际案例的分析&…

Google重磅开源!Gemma 2B/7B小模型登场,6万亿Tokens喂饱,聊天编程两不误,LLaMA也黯然失色?

Google又有大动作! 近日,他们发布了Gemma 2B和7B两个开源AI模型,与大型封闭模型不同,它们更适合小型任务,如聊天和文本摘要。 这两个模型在训练过程中使用了6万亿个Tokens的数据,包括网页文档、代码和数学…

收单外包机构备案2023年回顾和2024年展望

孟凡富 本文原标题为聚合支付深度复盘与展望,首发于《支付百科》公众号! 收单外包服务机构在我国支付收单市场中占据着举足轻重的地位,其规模在政策引导和市场需求驱动下不断扩大。同时,随着行业自律管理体系的持续发展和完善&a…

文献速递:GAN医学影像合成--用生成对抗网络生成 3D TOF-MRA 体积和分割标签

文献速递:GAN医学影像合成–用生成对抗网络生成 3D TOF-MRA 体积和分割标签 01 文献速递介绍 深度学习算法在自然图像分析中的成功近年来已被应用于医学成像领域。深度学习方法已被用于自动化各种耗时的手动任务,如医学图像的分割和分类(G…

顶刊中很出彩的二元变量图

导师希望你发顶刊, 但你的图纸差点意思, 那么,你不妨试试这个, 二元变量图, 在顶刊中都很出彩哦! 本次,我们来以“降水量”和“NDVI”两个数据为例,绘制二元变量分析图,表达“降水量”和“NDVI”之间的关系。 什么是二元变量图 首先还是先解释下“二元变量图”。顾…

OpenCV中saturate_cast模板函数

在OpenCV中,saturate_cast是一个模板函数,用于正确地将一个数值从一种类型转换到另一种类型,同时确保结果在目标类型的有效范围内。这在图像处理中特别有用,比如当像素值在经过计算后可能超出其数据类型允许的范围时。saturate_ca…

-bash: /root/.ssh/authorized_keys: Read-only file system

问题背景 由于跳板机不支持 ssh-copy-id 命令&#xff0c;为了配置免密登录&#xff0c;考虑在服务器上手动使用 cat 命令写入跳板机公钥 cat <<EOL >> ~/.ssh/authorized_keys [Your public key] EOL但却出现了以下错误 -bash: /root/.ssh/authorized_keys: Re…

编程笔记 Golang基础 013 格式化输入输出

编程笔记 Golang基础 013 格式化输入输出 一、格式化输出1. fmt.Print系列函数2. Printf格式说明3. 格式化布尔类型 二、格式化输入1. fmt.Scan系列函数注意事项 三、练习小结 Go语言中的格式化输入和输出主要通过标准库 fmt 包来实现。主要是输出需要格式化。 一、格式化输出 …

扫盲贴:Svg动画和Canvas动画有什么区别

hello&#xff0c;我是贝格前端工场&#xff0c;网页中动画的实现有N种方式&#xff0c;比如css动画&#xff0c;js动画&#xff0c;svg动画&#xff0c;canvas动画等等&#xff0c;每一种动画都有对应的场景&#xff0c;本问重点介绍一下svg和canvas动画的异同点&#xff0c;欢…

大工程 从0到1 数据治理 数仓篇(sample database classicmodels _No.7)

大工程 从0到1 数据治理 之数仓篇 我这里还是sample database classicmodels为案列&#xff0c;可以下载&#xff0c;我看 网上还没有类似的 案列&#xff0c;那就 从 0-1开始吧&#xff01; 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参…

TRS 2024 论文阅读 | 基于点云处理和点Transformer网络的人体活动连续识别

无线感知/雷达成像部分最新工作<持续更新>: 链接地址 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于 Nature/Science及其子刊; MobiCom, Sigcom, MobiSys, NSDI, SenSys, Ubicomp; JSAC, 雷达学…

提高代码质量的 10 条编码原则

提高代码质量的 10 条编码原则 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 今天来聊聊提高代码质量的 10 条编码原则。 软件开发需要良好的系统设计和编码标准。我们在下图中列出了 10 条良好的编码原则。 01 遵循代码规范 我们…

Studio One破解版和正版的区别 Studio One购买是永久的吗

在过去的很长一段时间里&#xff0c;很多小伙伴想要使用一款软件时&#xff0c;可能第一时间就去网上寻找破解版的资源&#xff0c; 白嫖的资源固然很香&#xff0c;但随着法制的健全和人们版权意识的增强&#xff0c;现在破解版的资源是越来越少了。同时破解版的资源也会伴随着…

大数据计算技术秘史(上篇)

在之前的文章《2024 年&#xff0c;一个大数据从业者决定……》《存储技术背后的那些事儿》中&#xff0c;我们粗略地回顾了大数据领域的存储技术。在解决了「数据怎么存」之后&#xff0c;下一步就是解决「数据怎么用」的问题。 其实在大数据技术兴起之前&#xff0c;对于用户…