【LeetCode:98. 验证二叉搜索树 + 递归】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 二叉搜索树 + 递归
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 98. 验证二叉搜索树

⛲ 题目描述

给你一个二叉树的根节点 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. 该题目我们可以通过前序、中序、后序遍历来求解,为了更好的理解dp,我们通过后续遍历来求解。
  2. 递归的含义:返回当前节点左子树的最小值和右节点的最大值。先递归左子树和右子树,然后根据返回的结果来与根节点判断。如果是小于等于左子树的最大节点,或者大于等于右子树的最小节点,说明不符合题目要求,比较对应的flag。然后,更新当前节点左子树的最小值和右节点的最大值。
  3. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {public boolean isValidBST(TreeNode root) {return process(root)[1] != Long.MAX_VALUE;}public long[] process(TreeNode root) {if (root == null)return new long[] { Long.MAX_VALUE, Long.MIN_VALUE };long[] left = process(root.left);long[] right = process(root.right);int x = root.val;if (x <= left[1] || x >= right[0]) {return new long[] { Long.MIN_VALUE, Long.MAX_VALUE };}return new long[] { Math.min(left[0], x), Math.max(right[1], x) };}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Hive SQL 开发指南(一)数据类型及函数

在大数据领域&#xff0c;Hive SQL 是一种常用的查询语言&#xff0c;用于在 Hadoop上进行数据分析和处理。为了确保代码的可读性、维护性和性能&#xff0c;制定一套规范化的 Hive SQL 开发规范至关重要。本文将介绍 Hive SQL 的基础知识&#xff0c;并提供一些规范化的开发指…

拖延心理:揭秘人们拖沓背后的真相

拖延&#xff0c;是许多人都曾经历过的心理状态。当我们被任务所压迫&#xff0c;却又无法迅速展开行动时&#xff0c;不禁让人思索&#xff0c;这是否与我们对任务的热爱程度有关呢&#xff1f;或许正如题目所言&#xff0c;人所有的拖沓都代表着他并非真正热爱。 拖延心理的…

就业班 2401--3.1 Linux Day9--文件查找和压缩

一、文件查找与打包压缩 grep: 文件内容过滤 [rootqfedu.com ~]# grep root /etc/passwd #从/etc/passwd文件中过滤root字段 grep ^root root$ root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 查找命令 [rootqfedu.com ~]# which ls ali…

linux 下获取U盘路径

linux会将usb设备挂载在media下,逻辑就是先查看所有挂载,将挂载里面含有media的路径保存到一个文件里,再去文件里读取u盘路径 查找对应的shell 指令为 : cat /proc/mounts | cut -d -f 2 | grep \"media\" 该指令为先查找 所有挂载.然后将查找的第二个字段截取出…

【基于HTML5的网页设计及应用】——float实现页面布局

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

【软件设计师】常见的算法设计方法——迭代法

&#x1f413; 迭代法 什么是迭代法 迭代法&#xff0c;作为一种重要的算法思想&#xff0c;在计算机科学、数学以及其他多个领域中都有着广泛的应用。那么&#xff0c;什么是迭代法呢&#xff1f; 简单来说&#xff0c;迭代法是一种通过不断重复某个过程来逐步逼近问题解的方…

Java基础-运算符,表达式和语句

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 运算符 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 条件运算符&#xff…

游戏寻路之A*算法(GUI演示)

一、A*算法介绍 A*算法是一种路径搜索算法,用于在图形网络中找到最短路径。它结合了Dijkstra算法和启发式搜索的思想,通过综合利用已知的最短路径和估计的最短路径来优化搜索过程。在游戏自动寻路得到广泛应用。 二、A*算法的基本思想 在图形网络中选择一个起点和终点。维护…

常用的17个运维监控系统(必备知识)

1. Zabbix Zabbix 作为企业级的网络监控工具&#xff0c;通过从服务器&#xff0c;虚拟机和网络设备收集的数据提供实时监控&#xff0c;自动发现&#xff0c;映射和可扩展等功能。 Zabbix的企业级监控软件为用户提供内置的Java应用服务器监控&#xff0c;硬件监控&#xff0c…

QGIS编译(跨平台编译)之五十五:libtasn1编译(Linux、MacOS环境下编译)

文章目录 1、libtasn1介绍2、libtasn1下载3.Linux下编译5.MacOS下编译1、libtasn1介绍 Libtasn1(GNU Libtasn1)是一个用于操作 ASN.1(Abstract Syntax Notation One,抽象语法表示一)数据结构的开源库。ASN.1 是一种描述结构化数据的标准,广泛应用于网络通信和数据交换领域…

Python web框架fastapi中间件的使用,CORS跨域详解

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;Fastapi 景天的主页&#xff1a;景天科技苑 文章目录 fastapi中间件与CORS1、中间件1.创建中间件方法2.中间件里面添加响应头…

alzet渗透泵技术手册,你收藏了吗?

alzet渗透泵技术手册之使用方向&#xff0c;ALZET 渗透泵是用于小鼠、大鼠和其他实验动物研究的小型植入式泵。这些微型泵以连续和受控的速率输送药物、激素和其他测试剂&#xff0c;持续时间从一天到六周不等&#xff0c;无需外部连接或频繁处理。其无人值守操作消除了实验室人…

跨地域传文件时 面临的安全、效率等问题要如何解决?

近年来&#xff0c;企业在异国、异地设立分支机构的越来越多&#xff0c;在日常经营中&#xff0c;企业总部和分支机构间存在平行、垂直及互相交叉的管理模式和业务往来需求&#xff0c;因此&#xff0c;大型企业存在必然的跨地域传文件场景&#xff0c;比如跨地理域文件交换、…

Java函数式接口使用

if (mbd.isSingleton()) {sharedInstance this.getSingleton(beanName, () -> {try {return this.createBean(beanName, mbd, args);} catch (BeansException var5) {this.destroySingleton(beanName);throw var5;}}); 函数式接口&#xff1a;可以将lamba表达式作为参数放…

揭秘麦肯锡的方法:产品经理解决问题指南

您是否想知道世界上最成功的产品经理如何始终如一地提供不仅满足而且超出预期的解决方案&#xff1f;秘密可能就在于世界上最负盛名的咨询公司之一麦肯锡公司所磨练的方法论。本文深入探讨了麦肯锡的问题解决流程&#xff0c;该流程专为希望提升水平的产品经理量身定制。 01. 麦…

2024最新AI大模型产品汇总

文章目录 1. 写在前面2. 效率工具3. 聊天机器人4. 应用开发工具5. Prompt工具与社区6. 通用基础大模型7. 训练框架8. 开源数据集9. 推理与部署平台及工具 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致…

Java MySQL数据库面试题(二)

Java MySQL数据库面试题&#xff08;二&#xff09; 前言1、说下Innodb和 myisam的区别吗&#xff1f;Innodb引擎&#xff1a;myisam引擎&#xff1a; 2、MySQL 如何优化 DISTINCT&#xff1f;3、如何查询表第1000到1020条记录&#xff1f;4、可以使用多少列创建索引&#xff1…

Flutter整体框架

Flutter整体框架由三部分组成&#xff1a;Framework、Engine和Embedder。 Framework Framework提供了一个用 Dart 语言编写的现代、反应式框架&#xff0c;由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码&#xff0c;以及更基础的异步、文件、…

李沐动手学习深度学习——4.5练习

1. 在本节的估计问题中使用λ的值进行实验。绘制训练和测试精度关于λ的函数。观察到了什么&#xff1f; 修改代码运行如图所示&#xff0c;可以发现对于lamda值的变化而言&#xff0c;对于训练loss和测试loss的影响不大。但是如果λ 太大后&#xff0c;train和test的loss会变得…

WPF 控件模板

控件模板 WPF的 ControlTemplate 是一种用于定义和自定义控件的外观和结构的模板&#xff0c;它可以完全替换控件的默认模板&#xff0c;实现个性化和复杂的效果。WPF 的 ControlTemplate 有以下几个特点: ControlTemplate 是一个 XAML 元素&#xff0c;它可以包含任何类型的 U…