可视化图解算法: 判断是不是二叉搜索树(验证二叉搜索树)

1. 题目

描述

给定一个二叉树根节点,请你判断这棵树是不是二叉搜索树。

二叉搜索树满足每个节点的左子树上的所有节点的值均严格小于当前节点的值;并且右子树上的所有节点的值均严格大于当前节点的值。

数据范围:节点数量满足 1≤n≤10^4^ ,节点上的值满足 -2^31^ ≤val≤2^31^−1

示例1

输入:

{1,2,3}

返回值:

false
示例2

输入:

{2,1,3}

返回值:

true

2. 解题思路

先来看二叉搜索树的性质:

二叉搜索树(Binary Search Tree,简称BST)是一种特殊的二叉树,其每个节点的值都大于左子树中所有节点的值并且小于右子树中所有节点的值。二叉搜索树允许快速查询、插入和删除操作,多数操作(插入、删除和查找)的时间复杂度都是O(log n)。

以下是二叉搜索树的一些基本特性:

1.左子树的所有节点的值都小于其父节点。

2.右子树的所有节点的值都大于其父节点。

3.左、右子树也必须是二叉搜索树。

4.每个节点只有一个父节点(除了根节点)和最多两个子节点(左子节点和右子节点)。

判断一颗二叉树是否为二叉搜索树依赖于树的左右子树。可以采用递归的方法。

先来看看是否满足递归的两个条件:

可以看出,判断二叉树是否为二叉搜索树的求解满足递归的两个条件,因此可以采用递归的方法进行求解。

一颗二叉树是否为二叉搜索树依赖于节点的左右子树。对于左子树,取值范围为:(-∞,root.val];对于右子树,取值范围为: [root.val,+∞)。因此对应的递推公式如下:

有了递推公式,就可以很方便的写出对应的代码。

如果文字描述的不太清楚,你可以参考视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1372111https://www.bilibili.com/cheese/play/ep1372111

  • Java版本:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep1367350

  • Golang版本:数据结构笔试面试算法-Go语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Go语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1364775

3. 编码实现

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @return bool布尔型*/
func isValidBST(root *TreeNode) bool {// write code herereturn recursion(root, math.MinInt32, math.MaxInt32) //对于二叉树来说,取值范围为:(-∞,+∞)
}func recursion(root *TreeNode, min int, max int) bool {// 2. 递归终止条件:// 2.2 如果二叉树为空,是搜索二叉树if root == nil {return true}// 2.2 如果当前节点的值小于min或者 大于max,则不是二叉搜索树if root.Val < min || root.Val > max {return false}// 1. 问题分解(递推公式)//左子树取值范围:(min,root.val];	右子树取值范围:[root.val,max)return recursion(root.Left, min, root.Val) && recursion(root.Right, root.Val, max)
}

具体完整代码你可以参考下面视频的详细讲解。

  • Python版本:https://www.bilibili.com/cheese/play/ep1372111https://www.bilibili.com/cheese/play/ep1372111

  • Java版本:数据结构笔试面试算法-Java语言版_哔哩哔哩_bilibili数据结构笔试面试算法-Java语言版,bilibili课堂,哔哩哔哩课堂,哔哩哔哩,Bilibili,B站,弹幕https://www.bilibili.com/cheese/play/ep1367350

  • Golang版本:https://www.bilibili.com/cheese/play/ep1364775https://www.bilibili.com/cheese/play/ep1364775

4.小结

判断一颗二叉树是否为二叉搜索树依赖于树的左右子树。可以采用递归的方法。对于节点的左子树,取值范围为:(-∞,root.val];对于节点的右子树,取值范围为: [root.val,+∞)。

《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:

        ✅   链表

        ✅   二叉树

        ✅   二分查找、排序

        ✅   堆、栈、队列

        ✅   回溯算法

        ✅   哈希算法

        ✅   动态规划

无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!

  • Python编码实现:https://www.bilibili.com/cheese/play/ss897667807https://www.bilibili.com/cheese/play/ss897667807

  • Java编码实现:https://www.bilibili.com/cheese/play/ss161443488https://www.bilibili.com/cheese/play/ss161443488

  • Golang编码实现:哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ss63997

对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。

今日佳句:长安回望绣成堆,山顶千门次第开。

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

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

相关文章

Markdown转WPS office工具pandoc实践笔记

随着DeepSeek、文心一言、讯飞星火等AI工具快速发展&#xff0c;其输出网页内容拷贝到WPS Office过程中&#xff0c;文档编排规整的格式很难快速复制。 注&#xff1a;WPS Office不支持Markdown格式&#xff0c;无法识别式样。 在这里推荐个免费开源工具Pandoc&#xff0c;实现…

python的turtle库实现四叶草

实现代码&#xff1a; import turtle turtle.pencolor(‘green’) turtle.fillcolor(‘green’) turtle.begin_fill() turtle.circle(100,90) turtle.left(90) turtle.circle(100,90) turtle.right(180) turtle.circle(100, 90) turtle.left(90) turtle.circle(100,90) tu…

北重数控滑台加工厂家:汽车零部件试验铁地板-安全性能的测试方法

汽车零部件的安全性能测试是非常重要的&#xff0c;其中铁地板测试是其中的一种常见测试方法之一。铁地板测试主要用于评估汽车零部件在发生碰撞或事故时的安全性能&#xff0c;以确保零部件在各种情况下都能提供有效的保护和安全性能。 铁地板测试通常包括以下步骤和方法&…

Linux0.11系统调用:预备知识

系统调用 预备知识 目标&#xff1a;了解系统调用的流程&#xff0c;在Linux 0.11上添加两个系统调用&#xff0c;并编写两个简单的应用程序测试它们。 对应章节&#xff1a;同济大学赵炯博士的《Linux内核0.11完全注释&#xff08;修正版V3.0&#xff09;》的第5.5节 下面就针…

如何防止 ES 被 Linux OOM Killer 杀掉

当 Linux 系统内存不足时&#xff0c;内核会找出一个进程 kill 掉它释放内存&#xff0c;旨在保障整个系统不至于崩溃。如果 ES 按照最佳实践去实施部署&#xff0c;会保留一半的内存&#xff0c;不至于发生此类事情。但事情总有例外&#xff0c;有的朋友可能 ES 和其他的程序部…

swagger2升级至openapi3的利器--swagger2openapi

背景&#xff1a; 因为项目需要升级JDK&#xff0c;涉及到swagger2升级至openapi3的情况。由于swagger 2和openapi 3的语法差距太大&#xff0c;需要对yaml进行升级。无奈单个yaml文件的内容太大&#xff0c;高至4万多行&#xff0c;手动进行语法的转换肯定是不可能了&#xff…

在yolo中Ultralytics是什么意思呢?超越分析的智能

在YOLO&#xff08;You Only Look Once&#xff09;目标检测框架中&#xff0c;Ultralytics 是一家专注于计算机视觉和机器学习技术的公司&#xff0c;同时也是YOLO系列模型&#xff08;如YOLOv5、YOLOv8等&#xff09;的官方开发和维护团队。以下是关键点解析&#xff1a; 1. …

【阿里云大模型高级工程师ACP习题集】2.7 通过微调增强模型能力 (上篇)(⭐️⭐️⭐️ 重点章节!!!)

习题集: 【单选题】在大模型微调中,与提示工程和RAG相比,微调的独特优势在于( ) A. 无需外部工具即可提升模型表现 B. 能让模型学习特定领域知识,提升底层能力 C. 可以更高效地检索知识 D. 能直接提升模型的知识边界,无需训练 【多选题】以下关于机器学习和传统编程的说…

CuML + Cudf (RAPIDS) 加速python数据分析脚本

如果有人在用Nvidia RAPIDS加速pandas和sklearn等库&#xff0c;请看我这个小示例&#xff0c;可以节省你大量时间。 1. 创建环境 请使用uv&#xff0c;而非conda/mamba。 # install uv if not yetcurl -LsSf https://astral.sh/uv/install.sh | shuv init data_gpucd data_g…

2-SAT之完美塔防

小N最近喜欢玩一款塔防游戏。 题目描述 这款游戏的棋盘是一个 nm 的网格&#xff0c;每个格子上会有以下类型物件&#xff1a; A 型炮台&#xff1a;会向上下两个方向同时发射激光&#xff0c;符号为 |;B 型炮台&#xff1a;会向左右两个方向同时发射激光&#xff0c;符号为…

【android bluetooth 案例分析 03】【PTS 测试 】【PBAP/PCE/SSM/BV-02-C】

1. 测试介绍 PBAP/PCE/SSM/BV-02-C [PCE Closes a PBAP Session] 1. Test Purpose Verify that the PCE can terminate a PBAP session. 2. Initial Condition IUT: The IUT is engaged in a PBAP session with the Lower Tester.Lower Tester: The Lower Tester is engag…

ArcGIS:开启洪水灾害普查、评估与制图新征程

技术点目录 一、洪水普查技术规范解读二、ArcGIS介绍及数据管理三、空间数据的转换与处理四、洪水淹没专题地图制作五、矢量数据的采集与处理六、栅格数据的下载与处理七、ArcGIS水文分析八、ArcGIS洪水分析九、ArcGIS淹没分析了解更多 ———————————————————…

【系统参数合法性校验】spring-boot-starter-validation

JSR303校验 统一校验的需求 前端请求后端接口传输参数&#xff0c;是在controller中校验还是在Service中校验&#xff1f; 答案是都需要校验&#xff0c;只是分工不同。 Contoller中校验请求参数的合法性&#xff0c;包括&#xff1a;必填项校验&#xff0c;数据格式校验&…

[零基础]内网ubuntu映射到云服务器上,http访问(frp内网穿透)

阿里云服务器&#xff0c;高校教师可以半价&#xff0c; frp下载地址&#xff1a;https://github.com/fatedier/frp/releases&#xff0c;选amd64&#xff0c; 云服务器开放端口 选择网络与安全–>安全组->管理规则 配置开放端口&#xff0c;7000为支持frp开放的端口&…

第十六届蓝桥杯 2025 C/C++组 破解信息

目录 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; 思路&#xff1a; 思路详解&#xff1a; 代码&#xff1a; 代码详解&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 题目链接&#xff1a; P12344 [蓝桥杯 2025 省 B/Python B 第二场] 破解信息…

OpenAI Embedding 和密集检索(如 BERT/DPR)进行语义相似度搜索有什么区别和联系

OpenAI Embedding 和密集检索&#xff08;如 BERT/DPR&#xff09;其实是“同一种思想的不同实现”&#xff0c;它们都属于Dense Retrieval&#xff08;密集向量检索&#xff09;&#xff0c;只不过使用的模型、部署方式和调用方式不同。 &#x1f9e0; 首先搞清楚&#xff1a;…

Linux电源管理(3)_关机和重启的过程

原文&#xff1a;Linux电源管理&#xff08;3&#xff09;_Generic PM之重新启动过程 1.前言 在使用计算机的过程中&#xff0c;关机和重启是最先学会的两个操作。同样&#xff0c;这两个操作在Linux中也存在&#xff0c;可以关机和重启。这就是这里要描述的对象。在Linux Ke…

C# 继承详解

继承是面向对象程序设计&#xff08;OOP&#xff09;中的核心概念之一&#xff0c;它极大地增强了代码的重用性、扩展性和维护性。本篇文章将详细讲解C#中的继承机制&#xff0c;包括基础概念、语法特法、多重继承&#xff08;通过接口实现&#xff09;、继承的规则和实际应用示…

SQLAlchemy 2.x 异步查询方法比较

SQLAlchemy 2.x 异步查询中常用的 结果处理方法速查表&#xff0c;包含方法说明、使用场景、返回类型及典型用途。 SQLAlchemy 查询结果处理方法速查表&#xff08;适用于 AsyncSession&#xff09; 方法 说明 返回类型 示例 SQL 示例输出 scalars().all() 获取单列所有…

极客天成参与”AI助力智慧城市构建”主题演讲暨招商引智专题推介活动

4月7日下午&#xff0c;北京极客天成科技有限公司参加了天津市河东区数据局举办的“AI赋能智慧城市构建”主题演讲暨招商引智专题推介活动。 活动中&#xff0c;华为&#xff08;天津&#xff09;有限公司数字政府解决方案总监姜华庚围绕“政务大模型赋能智慧城市建设”&#x…