求职力扣刷题DAY20--二叉树 part06
20
654. 最大二叉树
给定一个不重复的整数数组 nums
。 最大二叉树 可以用下面的算法从 nums
递归地构建:
- 创建一个根节点,其值为
nums
中的最大值。 - 递归地在最大值 左边 的 子数组前缀上 构建左子树。
- 递归地在最大值 右边 的 子数组后缀上 构建右子树。
返回 nums
构建的 *最大二叉树* 。
思路:
- 递归就行了
注意:
一般递归中,可以不用传数组就不传数组,传索引下标记就行了
这里寻找最大值没有优化,但是应该是可以的
代码实现
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:def constructMaximumBinaryTree(self, nums: List[int]) -> Optional[TreeNode]:def tranversal(left_index: int, right_index: int) -> TreeNode:#1.寻找构建数组的最大值,以及对应的索引,不变量,左闭右开#2.递归#3.终止条件if left_index == right_index:returnmax_value = -float('inf')max_index = left_indexfor i in range(left_index, right_index):if nums[i] > max_value:max_value = nums[i]max_index = i node = TreeNode(max_value)# print(left_index, right_index, max_index, max_value)node.left = tranversal(left_index, max_index)node.right = tranversal(max_index + 1, right_index)return nodereturn tranversal(0, len(nums))
还有单调栈的实现,后续可以看下
617. 合并二叉树
给你两棵二叉树: root1
和 root2
。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。
经典递归咯
代码实现
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1 and not root2:returnif not root1:return root2if not root2:return root1new_root = TreeNode(root1.val + root2.val)new_root.left = self.mergeTrees(root1.left, root2.left)new_root.right = self.mergeTrees(root1.right, root2.right)return new_root
700. 二叉搜索树中的搜索
给定二叉搜索树(BST)的根节点 root
和一个整数值 val
。
你需要在 BST 中找到节点值等于 val
的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null
代码实现
递归
# self.right = right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:#明确二叉搜索树的定义,左小右大, 中序遍历为升序排列if not root or root.val == val:return rootif val > root.val:return self.searchBST(root.right, val)if val < root.val:return self.searchBST(root.left, val)
迭代
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:def searchBST(self, root: Optional[TreeNode], val: int) -> Optional[TreeNode]:# #明确二叉搜索树的定义,左小右大, 中序遍历为升序排列# if not root or root.val == val:# return root# if val > root.val:# return self.searchBST(root.right, val)# if val < root.val:# return self.searchBST(root.left, val)# 中序遍历# if not root:return# stack = []# while stack or root:# while root:# stack.append(root)# root = root.left# root = stack.pop()# if root.val == val:# return root # root = root.right# return rootwhile root:if root.val > val:root = root.leftelif root.val < val:root = root.rightelse:return rootreturn
98. 验证二叉搜索树
给你一个二叉树的根节点 root
,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
-
节点的左
子树
只包含
小于
当前节点的数。
-
节点的右子树只包含 大于 当前节点的数。
-
所有左子树和右子树自身必须也是二叉搜索树。
思路:
遇到二叉搜索树,一定要考虑到中序遍历
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:max_value = -float('inf')def isValidBST(self, root: Optional[TreeNode]) -> bool:#中序遍历,维护一个最大值的变量,遍历的时候判断,root.val和max_value的da'xiaoif not root:return Trueleft = self.isValidBST(root.left)if not left or root.val <= self.max_value:return Falseself.max_value = root.valright = self.isValidBST(root.right)return right
相关文章:
求职力扣刷题DAY20--二叉树 part06
20 654. 最大二叉树 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 n…...

Error:Kotlin: Module was compiled with an incompatible version of Kotlin.
一、问题:运行spring boot项目时,idea报出错误:时提示报错如下图: 错误代码: Error:Kotlin: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected …...

关于flutter 启动 页面加载空白(三四秒空白页面)
一:可以在 对应的xml配置启动动画 <item><bitmapandroid:gravity"center"android:src"mipmap/ic_launcher" /></item> 二:以下是对应的文件目录 注意事项:俩处xml都配置一下,配置一样就可以了...

计量校准证书和检定证书区别,企业仪器校准要哪种证书好?
很多企业做校准,会要求校准机构出具相关证书,而有时候也会被机构询问,是要做检定还是校准,出具的证书是要校准证书还是检定证书?那么两者有什么区别呢? 1-检测方式不同 首先两种证书是不同检测方式所给的证…...
解析Java中1000个常用类:StackWalker类,你学会了吗?
推荐一个我自己写的小报童专栏导航网站: http://xbt100.top 收录了生财有术项目精选、AI海外赚钱、纯银的产品分析等专栏,陆续会收录更多的专栏,欢迎体验~复制URL可直达。 以下是正文。 Java 9 引入了许多新特性,其中之一是 StackWalker 类。StackWalker 提供了一种高效…...
【代码随想录算法训练Day32】LeetCode 122 买卖股票的最佳时机 II、LeetCode 55.跳跃游戏、LeetCode 45.跳跃游戏II
Day32 贪心第二天 LeetCode 122 买卖股票的最佳时机 II 思路真是无比巧妙,把区间利润拆成每天的利润,其实就是算出每天的利润,然后只取其中的正值即可。 在代码中计算是否计算加时还与0取最大值,相当于大于0才加入。 class Sol…...

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)
效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(...
2024年,计算机相关专业还值得选择吗?
2024年,计算机相关专业还值得选择吗? 随着2024年高考落幕,数百万高三学生又将面临人生中的重要抉择:选择大学专业。在这个关键节点,计算机相关专业是否仍是“万金油”的选择?在过去很长一段时间里…...

流批一体计算引擎-10-[Flink]中的常用算子和DataStream转换
pyflink 处理 kafka数据 1 DataStream API 示例代码 从非空集合中读取数据,并将结果写入本地文件系统。 from pyflink.common.serialization import Encoder from pyflink.common.typeinfo import Types from pyflink.datastream import StreamExecutionEnviron…...

Java进阶_多态特性
生活中的多态 多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 现实中,比如我们按下 F1 键这个动作,同一个事件发生在不同的对象上会产生不同的结果。…...

一个热门的源码整站数据打包完整代码(开箱即用),集成了最新有效数据和完美wordpress主题。
分享一个资源价值几千元的好代码资源网整站打包代码,这个wordpress网站基于集成了ripro9.1完全明文无加密后门版本定制开发,无需独立服务器,虚拟主机也可以完美运营,只要主机支持php和mysql即可。整合了微信登录和几款第三方的主题…...
操作系统真象还原-第3章 完善MBR
继续学习第三章,MBR这个引导程序上一次只是打印一个字符串,没有起到引导作用,这一章估计是要做引导了,我设想一个扇区应该不够,会再load一段代码,然后跳到这段代码执行。 开始吧: 3.1 地址/se…...

翻转链表-链表题
LCR 141. 训练计划 III - 力扣(LeetCode) 非递归 class Solution { public:ListNode* trainningPlan(ListNode* head) {if(head ! nullptr && head->next ! nullptr){ListNode* former nullptr;ListNode* mid head;ListNode* laster nul…...
【Android面试八股文】volatile和synchronize有什么区别?
volatile和synchronize有什么区别? 在 Java 多线程编程中,volatile 和 synchronized 是两个重要的关键字,它们分别用于处理并发访问共享变量的问题。尽管它们都可以用于确保多线程环境下的数据一致性,但在实际应用中却有着明显的区别和适用场景。 作用范围: volatile 只能…...
linux flask | 接口保持在后台一直运行、python后端接口长期调用、python后台持续运行方法、python提供后端接口
文章目录 一、flask接口二、长期运行接口2.1、nohup与&后台运行 实际项目中我们需要用python提供一个后端接口,并在linux上持续运行这个程序,以供其他项目调用。下面就用个简单示例讲解下怎么写python后端接口,以及如何将程序长期运行在l…...

二分查找算法:穿越算法迷宫的指南
✨✨✨学习的道路很枯燥,希望我们能并肩走下来! 目录 前言 一. 二分查找算法介绍 二 二分查找的题目解析 2.1 二分查找 2.2 在排序数组中查找元素的第一个位置和最后一个位置 2.3 搜索插入位置 2.4 x的平方根 2.5 山峰数组峰顶的索引 2.6 寻找峰值 2.7 寻找旋转数…...

【Week-R3】天气预测,引入探索式数据分析方法(EDA)
文章目录 1. 导入模块2. 导入数据3.探索式数据分析方法(EDA)3.1 数据相关性探索3.2 是否会下雨3.3 地理位置与下雨的关系3.4 湿度和压力对下雨的影响3.5 气温对下雨的影响 4.数据预处理4.1 处理缺损值4.2 构建数据集 5 预测是否会下雨5.1 构建神经网络5.…...

VBA excel 表格将多行拆分成多个表格或 文件 或者合并 多个表格
excel 表格 拆分 合并 拆分工作表按行拆分为工作表工作表按行拆分为工作薄 合并操作步骤 拆分 为了将Excel中的数万行数据拆分成多个个每个固定行数的独立工作表,并且保留每个工作表的表头,你可以使用以下VBA脚本。这个脚本会复制表头到每个新的工作表&…...
利用Redis的队列模式实现消息的发送和订阅,适合分布式场景,Java实现代码
在Redis中,通常使用发布/订阅模式(Pub/Sub)来进行消息的实时通信。然而,标准的Redis发布/订阅模式并不直接支持确保一条消息只被一台机器消费。在这种模式下,所有订阅了特定频道的客户端都会收到发布的消息。 但是&…...
软件下载安装【汇总】
软件下载安装【汇总】 前言版权推荐软件安装【汇总】最后 前言 2024-5-12 21:38:34 以下内容源自《【汇总】》 仅供学习交流使用 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://jsss-1.blog.csdn.net 禁止其他平台发布…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...