一起学习LeetCode热题100道(43/100)

news2024/9/20 10:10:41

43.验证二叉搜索树(学习)

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:
在这里插入图片描述
输入:root = [2,1,3]
输出:true

示例 2:
在这里插入图片描述
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:
树中节点数目范围在[1, 104] 内
-231 <= Node.val <= 231 - 1

解析:
一、定义递归函数:
1.我们需要一个递归函数来遍历树的每个节点,并检查它是否满足BST的性质。
2.这个函数将接收三个参数:当前节点、当前子树允许的最小值(min)、当前子树允许的最大值(max)。

二、基本情况:
1.如果当前节点为空(null),则认为它是有效的BST(因为没有节点违反规则)。

三、节点值检查:
1.对于非空节点,我们首先检查它的值是否在允许的范围内(即大于min且小于max)。
2.如果不在范围内,则直接返回false,因为该节点违反了BST的性质。

四、递归调用:
1.如果节点值在允许范围内,我们递归地检查其左子树和右子树。
2.对于左子树,我们保持min不变,但将max更新为当前节点的值(因为左子树中的所有值都必须小于当前节点的值)。
3.对于右子树,我们保持max不变,但将min更新为当前节点的值(因为右子树中的所有值都必须大于当前节点的值)。

五、返回结果:
1.如果所有递归调用都返回true,则最终返回true,表示整棵树是有效的BST。
2.如果在任何递归调用中返回了false,则立即返回false。

var isValidBST = function (root) {
    return isValidBSTHelper(root, -Infinity, Infinity);
}

function isValidBSTHelper(node, min, max) {
    if (node === null) {
        return true;
    }

    // 如果当前节点的值不满足在min和max之间,则返回false  
    if (node.val <= min || node.val >= max) {
        return false;
    }

    // 递归检查左子树和右子树,更新范围  
    return (
        isValidBSTHelper(node.left, min, node.val) &&
        isValidBSTHelper(node.right, node.val, max)
    );
} 

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

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

相关文章

spring bean的循环依赖

在Spring框架中&#xff0c;Bean的循环依赖是一个常见的问题&#xff0c;它指的是两个或多个Bean之间通过构造函数、Setter方法或字段注入等方式形成了相互依赖的闭环。Spring框架提供了强大的依赖注入功能&#xff0c;同时也提供了多种机制来处理循环依赖的情况&#xff0c;确…

【SCI论文写作】工程类论文写作(二)引言

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

护眼灯对眼睛有伤害吗?防止三大禁忌隐患

护眼灯对眼睛有伤害吗&#xff1f;护眼灯是现代生活中非常常见的照明工具&#xff0c;它在家庭和办公场所都得到了广泛应用。然而&#xff0c;随着人们对眼睛健康的关注日益增加&#xff0c;关于护眼灯是否可能对眼睛造成伤害的疑问也随之产生。这些疑问不仅涉及到人们的视力健…

黄晓娟:钱输光了她还伺候你?赵本山:她不伺候谁伺候?

黄晓娟&#xff1a;钱输光了她还伺候你&#xff1f;赵本山&#xff1a;她不伺候谁伺候&#xff1f; --小品《麻将豆腐》&#xff08;中1&#xff09;的台词与解说 &#xff08;接上&#xff09; 赵本山&#xff08;饰演大姐夫&#xff09;&#xff1a;诈和了 瞅好啊整不好让…

工作任务紧急程度如何快速区分?

在繁忙的工作中&#xff0c;我们每天都需要处理大量的工作任务。如果不将这些任务仔细区分&#xff0c;就很难保证按时完成所有任务。面对如此多的任务&#xff0c;仅凭脑力很难将它们一一整理和区分。这时&#xff0c;选择一款高效的待办事项管理软件&#xff0c;就成了一个不…

深度学习入门-01

1、安装Anaconda 创建一个虚拟环境&#xff0c;在Anaconda Prompt中创建&#xff0c;环境名称叫做pytorch&#xff0c;使用的python版本是3.10 conda create -n pytorch python3.10在这环境中需要安装的包&#xff0c;选择yes 激活环境&#xff1a; conda activate pytorch如…

排序算法之--插入排序

文章目录 一、简介二、算法思路分析三、算法复杂度分析&#xff1a;3.1、时间复杂度方面&#xff1a;3.2、空间复杂度方面&#xff1a; 四、代码实现&#xff1a; 一、简介 插入排序是一种简单直观的排序算法&#xff0c;‌它的工作原理是通过构建有序序列&#xff0c;‌该算法…

MySQL:查询(万字超详细版)

&#x1f48e;所属专栏&#xff1a; MySQL &#x1f48e;1. 单表查询 &#x1f48e;1.1 全列查询和指定列查询 全列查询&#xff1a; select * from exam; 在实际开发中不要使用 * 来进行查询&#xff0c;因为数据库会很大&#xff0c;影响效率 指定列查询&#xff1a; se…

低代码开发平台通过钉钉API实现流程管理数据对接

实例背景&#xff1a; CRM项目虽然实现了报价转订单的功能&#xff0c;但是客户还是遇到使用不方便的问题&#xff0c;客户的业务流程中&#xff0c;审核报价的时候是需要提供销售人员与客户的聊天记录截图&#xff0c;这都是在手机上的&#xff0c;电脑操作不方便&#xff0c…

WEB渗透免杀篇-MSF+shellcode免杀

nps_payload >python nps_payload.py正常生成 >msfconsole -r msbuild_nps.rc开启监听 >%windir%\Microsoft.NET\Framework\v4.0.30319\msbuild.exe xx.xml >wmiexec.py <USER>:<PASS><RHOST> cmd.exe /c start %windir%\Microsoft.NET\Framewo…

Python之字符串的函数和方法

字符串的函数和方法 字符串函数字符串方法方法链可选参数方法的嵌套 函数可以看做是执行特定任务的小程序。程序被打包或封装起来&#xff0c;提供给用户使用。**函数可以接受输人值&#xff0c;通过执行语句和判定表达式来完成任务&#xff0c;在完成时可能会返回值。**函数非…

基于STM32开发的智能家居温控系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭智能温控办公室环境监测常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居温控系统通过整合温度传感器、湿度传感器、风扇和加热器等硬件&#xf…

SQL进阶技巧:断点缝合问题【如何按照业务规则对相邻行数据进行合并】

目录 0 需求描述 1 数据准备 2 数据分析 3 小结 0 需求描述 如下图所示,按照定义的规则进行数据变换 注意:b中的数值只有0和1 1 数据准备 with data as( select 2010 a,0 b union all select 2011 a,1 b union all select 2012 a,0 b union all select 2013 a,1 b un…

吴恩达机器学习-C2W1L3-简单神经网络

在本实验中&#xff0c;我们将使用Numpy构建一个小型神经网络。它将是你在Tensorflow中实现的相同的“咖啡烘焙”网络。 import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) import tensorflow as tf from lab_utils_common import…

ACL主席:ACL不是AI会议

敲响警钟还是走向封闭&#xff1f; 点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 「ACL 不是 AI 会议&#xff08;ACL is not an Al conference&#xff09;」&#xff0c;在泰国曼谷举办的 ACL 2024 上&#xff0c;今年的 ACL 主席 Emily M. Bender 抛出…

实训日记day29

MySQL读写分离 1、读写分离的目的 数据库负载均衡&#xff1a; 当数据库请求增多时&#xff0c;单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求&#xff0c;进行负载均衡 但是由于数据库服务特殊原因&#…

读零信任网络:在不可信网络中构建安全系统20攻击者视图

1. 攻击者视图 1.1. IETF要求所有提交的RFC都必须包含“安全风险考虑" 1.1.1. 明确指出了潜在陷阱、危险和警告&#xff0c;这对系统的实现和部署至关重要&#xff0c;有助于运营者确保最终的系统不会偏离设计之初的安全特性 1.1.2. 表明系统设计者对于可能存在的攻击进…

leetcode387. 字符串中的第一个唯一字符,哈希表

leetcode387. 字符串中的第一个唯一字符 给定一个字符串 s &#xff0c;找到 它的第一个不重复的字符&#xff0c;并返回它的索引 。如果不存在&#xff0c;则返回 -1 。 示例 1&#xff1a; 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例…

可能是全网最好用的 5 款免费数据恢复软件

不小心将 USB 中的文件删除了&#xff0c;这个时候要怎么办&#xff1f;首先我们不要保存 USB 磁盘上的任何新数据&#xff0c;否则丢失的数据文件将被覆盖。然后再利用专业的数据恢复工具进行恢复&#xff0c;这里为大家整理了全网最被推荐的5款免费的数据恢复软件。 1.福昕数…

vmware虚拟机玩GPU显卡直通

安装好exsi以后&#xff0c;找到管理----硬件-----PCI设备&#xff0c;勾选想要直通的显卡&#xff0c;然后点击“切换直通” 切换以后可以看到列表中的直通列显示为活动就对了。 然后编辑虚拟机设置&#xff0c;CPU关闭硬件虚拟化&#xff08;向客户机操作系统公开硬件辅助的…