当前位置: 首页 > news >正文

LeetCode50天刷题计划第二季(Day 7 — 验证二叉搜索树(15.00-16.00

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、题目
    • 验证二叉搜索树
    • 示例
    • 提示:
  • 二、思路
  • 三、代码


前言

写代码10分钟,debug两小时

一、题目

验证二叉搜索树

给你一个二叉树的根节点 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

二、思路

一开始想着,对于每个根结点,检查其左右孩子是否符合要求,然后检查子树,但这种方法只能检查子树的根结点,检查不出来是否子树中所有节点都能满足条件。
因此考虑,如果使用递归的方法,需要递归地的给每个结点设置一个区间,判断结点值是否在区间内,
这个区间根据根结点的值动态变化:对于左子树,用根节点的值作为右边界;对于右子树,用根节点的值作为左边界。

注意边界条件的选择,因为题目中给的值是-231 <= Node.val <= 231 - 1,因此边界设置为了:

  MIN=-pow(2,31)-1 ; MAX=pow(2,31)

就当是val都是整数吧hhhh~

三、代码

# 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 isValidBST(self, root: Optional[TreeNode]) -> bool:
        MIN=-pow(2,31)-1 #设置边界
        MAX=pow(2,31)
        def isBST(root,l,r):
            if(root == None ): #根结点为空
                return True
            if(root.val<=l or root.val>=r): #根节点值越界
                return False
            Left=isBST(root.left,l,root.val) #递归,
            Right=isBST(root.right,root.val,r)
            return Left and Right #判断
        return isBST(root,MIN,MAX) #返回
           

在这里插入图片描述

相关文章:

  • 在 IDEA 中用 Nacos2.1.0 源码启动集群模式并调试
  • 前端毕业设计:Nodejs+Vue菜鸟驿站仓库管理系统的设计与实现
  • 服务器的基本概念与初识Ajax,jQuery当中的ajax,get(),post()接口,postman测试接口
  • Java基于SpringBoot+Vue+nodejs的企业公司人事管理系统 Element
  • webpack5构建基于Vue3+ElementPlus项目搭建(开发和生产)
  • 6. 测度论-期望及其性质
  • java计算机毕业设计贫困助学管理系统源程序+mysql+系统+lw文档+远程调试
  • Java | 异常类【万字详解,看过来】
  • opencv 矩形检测与计数
  • vscode ssh远程连接失败问题及解决
  • aistudio 常规赛:钢铁缺陷检测挑战赛 经验总结,轻松复现map 46的结果
  • 【解决方案】成功解决将XGBoost中plot_importance绘图时出现的f0、f1、f2、f3、f4、f5等改为对应特征的字段名
  • 二十四、C 文件读写
  • 程序员如何庆祝十一:用Python绘制红色的中国地图
  • 十一、动态规划题目相关
  • #Java异常处理
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Docker下部署自己的LNMP工作环境
  • eclipse的离线汉化
  • IDEA常用插件整理
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java正则表式的使用
  • mysql 5.6 原生Online DDL解析
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • vue-cli在webpack的配置文件探究
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • yii2权限控制rbac之rule详细讲解
  • 成为一名优秀的Developer的书单
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 解析带emoji和链接的聊天系统消息
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 目录与文件属性:编写ls
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 如何优雅地使用 Sublime Text
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • ​linux启动进程的方式
  • #define 用法
  • #大学#套接字
  • $.proxy和$.extend
  • (1) caustics\
  • (4)logging(日志模块)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (实战篇)如何缓存数据
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)Scala的“=”符号简介
  • (转载)(官方)UE4--图像编程----着色器开发
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .net 4.0发布后不能正常显示图片问题
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存