【刷题笔记】--验证二叉搜索树--min,max参与递归

news2024/11/28 20:51:45

题目:

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

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

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

示例 1:


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

示例 2:


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


思路:

要注意某个结点的左右孩子不仅仅是要满足对于自己的双亲的大小,对于双亲的双亲也要满足

所以就会想到在递归的时候设置最大最小值。每个结点都应满足大于最小值小于最小值

那对于每个结点要怎么去确定这个最大最小值呢?

对于左孩子,总是要比双亲小,所以递归左节点时,最大值要一起更新,最大值就是这个双亲的值。 最小值不用更新。用现有的最小值即可。

对于右孩子,总要比双亲大,所以递归右结点时,最小值要一起更新。同里最大值不用更新。比如当root->val==3时,此时还跟着max=5。所以当进入root->right时,max不用更新。


 代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isValid(struct TreeNode* root,long min,long max){
    if(root==NULL){
        return true;
    }
    if(root->val<=min||root->val>=max){
        return false;
    } 
    return isValid(root->left,min,root->val)&&isValid(root->right,root->val,max);
}
bool isValidBST(struct TreeNode* root){
    if(root==NULL){
        return true;
    }
    return isValid(root,LONG_MIN,LONG_MAX);
}

学到的:1.LONG_MAX 存在与头文件limits.h中,表示long int 类型的最大值。

               2.&&

① 当逻辑与左边为false(假),则不再进行逻辑与右边的判断,结果为false(假)
② 当逻辑与左边为true(真)则进行右边判断,右边为false(假),结果为false(假)
③ 当逻辑与左边为true(真)则进行右边判断,右边也为true(真),则结果为true(真)

               3.min,max参与递归的思路

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

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

相关文章

【大唐杯备考】——5G基站开通与调测(学习笔记)

&#x1f4d6; 前言&#xff1a;本期介绍5G基站开通与调测。 目录&#x1f552; 1. 概述&#x1f552; 2. 5G基站开通与调测基础&#x1f558; 2.1 3.5GHz单模100MHz配置&#xff08;S111&#xff09;&#x1f558; 2.2 3.5GHz单模100MHz配置&#xff08;S111111&#xff09;&a…

车载以太网 - SomeIP - 杂项 - 09

SomeIP-SD Find Service Timing - 服务发现相关时间参数参数描述最小值标准值最大值T_Initial初始化时间0msNA1000msTTL生存时间NA5000msNAT_Cycle_Offer_Msg提供服务报文周期950ms1000ms1050msRepetition_Max最大重复次数NA3次NAInitial_dealy_Min初始化最小延迟NA90msNAIniti…

Spring、SpringMVC、Shiro、Maven

一、SpringSpring是一个为了解决企业应用程序开发复杂性而创建的开源框架&#xff0c;其核心是IOC–控制反转、AOP–面向切面编程。框架的主要优势之一就是其分层架构&#xff08;WEB层&#xff08;springMvc&#xff09;、业务层&#xff08;Ioc&#xff09;、持久层&#xff…

面向对象的基本概念和方法

面向对象的开发方法在近几十年见得以广泛应用&#xff0c;我们常见的Java语言就是一种典型的面向对象的开发语言。然而&#xff0c;面向对象的概念较为复杂&#xff0c;知识点也很细碎&#xff0c;本文整理了面向对象的基本概念和方法&#xff0c;供大家参考。为了便于读者理解…

Java笔记-多线程高阶

目录一、多线程1.为什么使用多线程&#xff1a;2.多线程使用场景&#xff1a;3.使用多线程要考虑的因素&#xff1a;二、线程间竞争对象锁的过程三、synchronized关键字1.synchronized的作用&#xff1a;2.synchronized执行效率&#xff1a;3.synchronized实现原理&#xff1a;…

P14 PyTorch AutoGrad

前言&#xff1a;激活函数与loss的梯度PyTorch 提供了Auto Grad 功能&#xff0c;这里系统讲解一下torch.autograd.grad系统的工作原理&#xff0c;了解graph 结构目录&#xff1a;1: require_grad False2: require_grad True3&#xff1a; 多层bakcward 原理4&#xff1a; in…

YOLO-V4经典物体检测算法介绍

在前文我们介绍了YOLO-V1~V3版本都做了哪些事&#xff0c;本文我们继续介绍YOLO-V4版本。YOLO的作者在发表完V3之后&#xff0c;发现YOLO产品被美国军方应用到了很多军事战争当中&#xff0c;这是他所不希望看见的&#xff0c;因此宣布不再继续研究。但历史和科技总是随时间不断…

(第五章)OpenGL超级宝典学习:统一变量(uniform variable)

统一变量 前言 本篇在讲什么 本篇记录对glsl中的变量uniform的认知和学习 本篇适合什么 适合初学Open的小白 适合想要学习OpenGL中uniform的人 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 …

设计模式-组合模式和建筑者模式详解

一. 组合模式1. 背景在现实生活中&#xff0c;存在很多“部分-整体”的关系&#xff0c;例如&#xff0c;大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样&#xff0c;例如&#xf…

spring注解的开端(@Component替代bean标签的使用)

目录 一、介绍 1.什么是注解开发&#xff1f; 2.Spring注解的版本 3.基于spring注解的应用 4. Component的细分注解 5.相关注解 二、简单例子讲解 1.类打注解 2.扫描注解放入工厂 3.总工厂取注解调用 4.运行结果 总结&#xff1a; 一、介绍 1.什么是注解开发&…

人工智能聊天工具ChatGPT为Delphi写的诗歌

现在每个人似乎都在谈论 ChatGPT&#xff0c;所以这里有一首关于我们最喜欢的开发工具Delphi的好诗&#xff0c;来自 ChatGPT 生成的 Embarcadero 的 Delphi。 Delphi&#xff0c;哦&#xff0c;Delphi&#xff01; 作者&#xff1a;ChatGPT Delphi&#xff0c;哦&#xff0c;…

java面试题(十九) Mybatis

4.1 谈谈MyBatis和JPA的区别 参考答案 ORM映射不同&#xff1a; MyBatis是半自动的ORM框架&#xff0c;提供数据库与结果集的映射&#xff1b; JPA&#xff08;默认采用Hibernate实现&#xff09;是全自动的ORM框架&#xff0c;提供对象与数据库的映射。 可移植性不同&…

166_技巧_Power BI 窗口函数处理连续发生业务问题

166_技巧_Power BI 窗口函数处理连续发生业务问题 一、背景 在生产经营的数据监控中&#xff0c;会有一类指标需要监控是否连续发生&#xff0c;从而根据其在设定区间中的连续频次来评价业务。 例如&#xff1a; 员工连续迟到天数。销售金额连续上升或者下降。用户连续登陆…

卧槽!一个小时不到就把ChatGPT接入了微信!被问疯了~

大家好&#xff0c;我是鸟哥。一个半路出家的程序员。 最近ChatGPT又火了&#xff0c;一时兴起就把它接入我的微信机器人中。从账号注册到接入微信机器人&#xff0c;全程不到1个小时就搞定了&#xff01;当然不是我牛逼而是Github上的人才太多了。 大家聊的还是很嗨的&#…

Hadoop自动安装JDK

目录 1、使用xftp工具 在opt目录下创建install和soft文件 ​2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 4、 运行 5、测试 1、使用xftp工具 在opt目…

SpringBoot整合(二)MyBatisPlus技术详解

MyBatisPlus详解 一、标准数据层开发 MyBatisPlus&#xff08;简称MP&#xff09;是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提高效率 MyBatisPlus的官网为:https://mp.baomidou.com/ 1.1 标准CRUD 1.2 新增 int insert (T t)T:泛型&#xff0c…

SAP SD模块相关表的知识笔记

VBAK表 销售凭证&#xff08;抬头数据&#xff09; 主键为VBELN: 销售凭证 常用的有&#xff1a; kunnr : 售达方 erdat: 记录创建日期 vdatu: 请求交货日期 VBAP表 &#xff08;销售凭证&#xff1a;项目数据&#xff09; 主键为 vbeln销售凭证 和posnr 行号 常用的有&#x…

2年功能测试月薪9.5K,100多天自学自动化,跳槽涨薪4k后我的路还很长...

前言 其实最开始我并不是互联网从业者&#xff0c;是经历了一场六个月的培训才入的行&#xff0c;这个经历仿佛就是一个遮羞布&#xff0c;不能让任何人知道&#xff0c;就算有面试的时候被问到你是不是被培训的&#xff0c;我还是不能承认这段历史。我是为了生存&#xff0c;…

leaflet加载KML文件,显示图形(方法2)

第049个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载KML文件,将图形显示在地图上。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果; 注意如果OpenStreetMap无法加载,请加载其他来练习 文章目录 示例效果配置方式示例源代码(共66…

YOLOv5-Backbone模块实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第P8周&#xff1a;YOLOv5-Backbone模块实现&#x1f356; 作者&#xff1a;K同学啊一、前期准备1.设置GPUimport torch from torch impor…