98.验证二叉搜索树 python

LeetCode.98 验证二叉搜索树(python解法) 目录题目solution_1solution_1参考资料 题目 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \... 阅读详情

题目

题目描述

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

节点的左
子树
只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

在这里插入图片描述

输入:root = [2,1,3]
输出:true

示例 2:

在这里插入图片描述

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

树中节点数目范围在[1, 104] 内
- 2 31 2^{31} 231 <= Node.val <= 2 31 2^{31} 231 - 1

题解

要判断一棵二叉树是否为有效的二叉搜索树(BST),可以采用递归的方法,利用每个节点值必须处于一个特定的范围内这一性质。对于BST而言,根节点的值应该大于左子树中任何节点的值,并且小于右子树中任何节点的值。基于这一点,我们可以设计一个递归算法来验证这棵树。

解决方案

  1. 初始化:

    • 定义辅助函数 isBSTHelper(node, minVal, maxVal) 来判断以 node 为根节点的子树是否是BST,同时确保该子树中所有节点的值都位于 (minVal, maxVal) 范围内。
  2. 递归检查:

    • 如果当前节点为空,返回 true,表示空树满足条件。
    • 如果当前节点的值不在 (minVal, maxVal) 范围内,则返回 false。
    • 对左右子树进行递归检查,更新相应的范围:对于左子树,最大值变为当前节点值减一;对于右子树,最小值变为当前节点值加一。
  3. 调用辅助函数:

    • 初始调用时,范围设置为最小和最大的可能值,即 LONG_MIN 和 LONG_MAX,确保开始时不施加任何限制。

代码实现

以下是基于上述逻辑的一个Python实现:

def isValidBST(root: TreeNode) -> bool:
    def isBSTHelper(node, minVal, maxVal):
        if not node:
            return True
        if not (minVal < node.val < maxVal):
            return False
        return (isBSTHelper(node.left, minVal, node.val) and
                isBSTHelper(node.right, node.val, maxVal))
    
    return isBSTHelper(root, float('-inf'), float('inf'))

这段代码首先定义了一个二叉树节点类 TreeNode,然后实现了 isValidBST 函数来判断给定的二叉树是否是有效的二叉搜索树。我们使用了两个无限值 float('-inf') 和 float('inf') 作为初始值范围,确保对根节点没有额外限制。通过递归地缩小检查范围,我们能够有效地验证每个节点是否满足BST的要求。这种方法的时间复杂度为 O(n),其中 n 是树中节点的数量,因为每个节点都被访问一次。

提交结果

在这里插入图片描述

LabVIEW实战:基于DAQmx的实时正弦波生成、采集与波形图动态显示 本文详细介绍了如何使用LabVIEW和DAQmx驱动实现实时正弦波的生成、采集与动态显示。通过USB-6008数据采集卡,结合队列缓冲机制和动态波形图显示技术,构建了一个完整的信号处理系统。文章包含硬件连接、软件配置、任务设置及常见问题排查,适合LabVIEW初学者和硬件控制开发者参考。 阅读详情

相关推荐

手把手教你用OpenCompass评估Qwen1.5-1.8B模型(含数据集配置详解)

本文提供了使用OpenCompass评估Qwen1.5-1.8B-Chat模型的详细实战教程。内容涵盖从创建独立Python环境、下载模型与核心数据集,到编写配置文件、执行评测命令及解读结果的完整流程。重点解析了模型与数据集的配置细节,并分享了性能调优与常见问题排查方法,旨在帮助开发者快速上手系统化的模型评估。

weixin_29228781的博客 137

力扣98:验证二叉搜索树

力扣98:验证二叉搜索树。C语言

m0_56332819的博客 430

ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析

本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。

zeta9的博客 365

98-二叉树-验证二叉搜索树

左子树:节点的左子树只包含小于当前节点的数。右子树:节点的右子树只包含大于当前节点的数。递归性质:左子树和右子树本身也必须是二叉搜索树。中序遍历BST 可以得到一个递增的有序序列。每个节点的值都大于其左子树所有节点的值,小于其右子树所有节点的值。通过递归并维护每个节点的值在特定范围内,我们能够高效地验证整个二叉树是否符合 BST 的性质。时间复杂度O(n),每个节点只被访问一次。空间复杂度O(h),其中h是树的高度,主要用于递归调用栈。中序遍历的严格递增性。

qq_46060468的博客 1371

从理论到实践:笛卡尔空间阻抗控制的实现挑战与变体解析

本文深入探讨了笛卡尔空间阻抗控制的核心原理、工程实现中的五大挑战及经典变体实战解析。通过详细的数学建模和实际案例分析,揭示了阻抗控制在工业机器人、医疗设备等领域的应用价值,特别是在力感知精度、动力学模型校准和实时计算等方面的关键技术突破。

weixin_30952535的博客 449

告别迷茫!新手如何从RTKLIB命令行程序入手,快速理解GNSS解算全流程

本文为GNSS新手提供RTKLIB命令行程序实战指南,重点介绍如何通过`rnx2rtkp`后处理解算工具快速掌握GNSS解算全流程。从环境搭建、程序编译到核心算法解析,帮助读者理解RTKLIB源码结构,并通过真实数据处理案例演示完整解算过程,是入门GNSS定位技术的实用教程。

weixin_42524226的博客 359

Leetcode 中用树&二叉树&二叉搜索树以及98. 验证二叉搜索树(Python3)

这三道题的核心都是树(Tree)&amp;二叉树(Binary Tree)&amp;二叉搜索树(Binary Search Tree) 这节老师主要讲解的内容 a.Tree、Binary Tree、Binary Search Tree b.Graph   Tree的概念图: Binary Tree的概念图: 这里的二叉树是满二叉树,而满二叉树是一种特殊的完全二叉树。 Gra...

Aries 764

IgH EtherCAT 从入门到精通:第 30 章 实战:高可用 EtherCAT 系统设计

摘要:构建高可用EtherCAT系统的关键技术 本章详细介绍了工业级EtherCAT系统的高可用性设计方法,主要包括: 冗余链路架构:采用双网卡环形拓扑设计,主备网卡同时工作,通过IgH Master的冗余配置实现线缆故障自动切换。 状态监控机制:提供专用API实时监控主备链路状态,包括从站响应数、链路状态和冗余激活标志,形成完整的故障判断矩阵。 自动恢复功能:系统内置FSM架构支持热插拔自动检测和重配置,从站断线/重连时可自动完成状态恢复,同时允许应用层实施安全措施。 这些技术共同构成了生产环境下Ethe

从事嵌入式linux android驱动开发,拥有全栈能力 243

LeetCode 98 验证二叉搜索树 Validate Binary Search Tree Python

有关二叉树的做题笔记,Python实现 二叉树的定义 # Definition for a binary tree node. class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None 98. 验证二叉搜索树 Validate...

fongim的博客 449

YOLOv10涨点改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF原创自研创新

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2086

【AI智能体】Dify 搭建个人专属简历美化助手操作详解

Dify 搭建个人专属简历诊断助手实战操作详解

congge 4381

98. 验证二叉搜索树 Python

我们只需要遍历二叉树每一个节点,每次更新当前节点对应的范围,然后判断当前节点的值是否位于该范围,就可以知道其是否满足二叉搜索树条件。到这里就能很直观的看出来,每一个节点对应的位置的范围,如果该结点的值在这一范围内,则满足二叉搜索树的条件,反之则不满足。②所有的区间范围都应该是开区间,因为二叉搜索树中不应该存在重复的数值。-1],我们则需要设置一个超出这个范围的值作为-∞和+∞(本题以-2。①题目要求中所提出,任意结点的值的范围是[-2。[父节点范围的下限,父节点的值][父节点的值,父节点范围的上限]

小明 1172

【2022网易雷火】游戏研发笔试-AC代码及题目分享

3个小时,4道题目,雷火的题目不在于难,更在于对细节的把控和写大模拟的耐心,花了一个半小时,AC了3.85,直接交卷退了。第一题AC,第二题AC,第三题85%,第四题AC。下面分享一下大致的题意和对应的代码,就不多说了,最近很累(代码可能会有贴错的情况,如有望指正,感谢~)。 T1-小Y抽奖 题意 n行m列个奖励格子,每次抽奖消耗一个道具。每个格子奖励的数量有限且各不相司。每个格子被抽到一次,剩余的奖励数量-1。剩余的奖励数量为0时,则不会再抽到该格子。小Y抽了好多次,但一直没有抽到最想要的..

米莱虾 9266

LeetCode#98 验证二叉搜索树 Python

我用的递归,以为没问题,结果提交之后没通过! 仔细阅读才发现,题目我都没完全理解: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 比如:[10,5,15,null,null,6,20] 这个测试用例结果应该返回false,因为右子树中的左子节点6小于根节点10 我好傻呀 以下是看了题解之后再写的正解: 1、递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, x.

明明的博客 306

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

LeetCode 98. 验证二叉搜索树 | Python

根据二叉搜索树的性质,用栈实现中序遍历的思路,进而解决《98. 验证二叉搜索树》问题

"大梦三千秋的博客 666

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

leetcode98. 验证二叉搜索树python

题目描述: 题解: 二叉搜索树的性质是:任何一个节点的左子树中的所有节点值都小于该节点值,其右子树中所有节点值都大于当前节点值(必须满足,节点值相等也不行)。二叉搜索树的中序遍历结果是一个升序序列。 1.首先对二叉搜索树进行中序遍历,保存结果midorder 2.判断midorder是否满足升序。 注意:本来利用sorted将midorder进行排序,对比midorder和sorted后结果是否完全相同,但这种方法不适用于有相同节点值的情况。 class Solution(obj...

ganggang的博客 320

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Python实战】LeetCode98:验证二叉搜索树

题目描述 解法一:递归 值得注意的是,对于一棵二叉搜索树中的每个节点,不仅右子结点要大于该节点,其整个右子树的节点都应该大于该节点。同理,每个节点不仅左子结点要小于该节点,其整个左子树的节点都应该小于该节点。 因此,在遍历树的同时,需要保留每个节点的上界与下界,在比较时,不仅与子结点的值进行比较,也要与上下界比较。这里的上下界指的是,对于每个节点,其左子树的所有节点都有一个上界,都应该小于该节点...

Mr_SCX的博客 442

Leetcode 98 验证二叉搜索树 Python实现

给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1:输入: 2 / \ 1 3输出: true输入: 5 / \ 1 4 / \ 3 6输出...

weixin_30361641的博客 258

力扣:(98)验证二叉搜索树(Python)

给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。

2503_91125378的博客 281

LeetCode Medium 98 验证二叉搜索树 Python

def isValidBST(self, root): """ My Method 2 Solution Method 也是这个思路 算法:递归 思路: 在递归的过程中判断左右是否满足要求 递归的时候用min_border和 max_border记录当前位置最小不能小于多少,最大不能大于多少 左侧节点应该小于...

h 272

leetcode 98.验证二叉搜索树(python)

leetcode 98.验证二叉搜索树(python) 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4 / \ 3 6 输出: false 解释: 输入为: [5,1,4,null,n

pureszgd的博客 429

【Leetcode_总结】98. 验证二叉搜索树 - python

Q: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例 1: 输入: 2 / \ 1 3 输出: true 示例 2: 输入: 5 / \ 1 4   / \   ...

maka_uir的博客 524

力扣98.验证二叉搜索树——Python版

题目:98.验证二叉搜索树 思路:递归 代码: # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution(object): pre

qq_38603174的博客 1366

LeetCode 98 验证二叉搜索树 Python

给定一个二叉树,判断其是否是一个有效的二叉搜索树。一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。示例 1:输入: 2 / \ 1 3 输出: true 示例 2:输入: 5 / \ 1 4   / \   3 6 输出: false 解释: 输入...

ma412410029的博客 2416

leetcode98.验证二叉搜索树 Python

题目: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 示例: 输入: 2 / \ 1 3 输出: true 思路: 如果是二叉搜索树,那中序遍历得到的结果应该是升序排列的,所以我们维护当前遍历节点的前一个节点,比较是不是后边的节点大,如果不是直接返回false,如果在循环中没有返回,就说明遍历到的节点都满足条件,在跳出循环后返回真。

qq_36849855的博客 280

Leetcode98 验证二叉搜索树 C++,Java,Python

Leetcode98 验证二叉搜索树 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/validate-binary-search-tree/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树...

Rp的博客 273
上一篇: 97.交错字符串 python
下一篇: 99.恢复简单二叉树 python
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值