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

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

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.xdnf.cn/news/2916.html

相关文章:

  • SEO优化指南与实战技巧
  • centos安装部署配置kafka
  • Vue常用的修饰符有哪些有什么应用场景(含deep seek讲解)
  • 通用事件库IO多路复用技术选型与设计
  • 常见位运算总结
  • 塑料材料工程师简历模板
  • C#进阶学习(十七)PriorityQueue<TElement, TPriority>优先级队列的介绍
  • 阿里云服务器 篇十二:加入 Project Honey Pot 和使用 http:BL
  • 万象生鲜配送系统代码2025年4月29日更新日志
  • Java练习3
  • c语言的常用的预处理指令和条件编译
  • __proto__与prototype
  • 误在非开发分支上开发解决方案
  • LabVIEW实验室项目中使用类模块与仿真
  • Linux 怎么安装 Oracle Java 8
  • 通过logrotate和cronolog对日志进行切割
  • 什么是DNS缓存?怎么清理DNS缓存?
  • 网络安全攻防演练实训室建设方案
  • 9.idea中创建springboot项目
  • Next框架学习篇 ✅
  • Nginx部署与源码编译构建LAMP
  • Java基础 4.29
  • OpenJDK 1.8中-Xloggc参数下GC日志覆盖与追加模式深度解析
  • 软文发稿:媒体发稿的关键策略及实战价值
  • Android Studio中OpenCV应用详解:图像处理、颜色对比与OCR识别
  • 水污染检测数据集VOC+YOLO格式2487张4类别
  • mangodb的数据库与集合命令,文档命令
  • 字节跳动社招面经 —— BSP驱动工程师(4)
  • 【计算机网络】DHCP——动态配置ip地址
  • 仿真干货|云端CAE实战——OpenRadioss物品碰撞模拟分析