当前位置:网站首页>leetcode刷题第13天二叉树系列之《98 BST及其验证》
leetcode刷题第13天二叉树系列之《98 BST及其验证》
2022-08-11 03:42:00 【小机double】
98 BST及其验证
BST即二叉binary search tree,二叉搜索树,也有称为是二叉排序树的,当对其使用中序遍历的时候可以得到一个递增的序列。
题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树
假设一个二叉搜索树具有如下特征:
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例
输入:
2
/
1 3输出:true
输入:
5
/ \
1 4
/ \
3 6
输出:false
解释:根节点的值为5,但是其右子节点的值为4,不满足右子树所有节点的值大于根节点的条件
题目解析
根据题目提示的深度优先搜索,可以使用递归的方式来写。每次判断左右子树是否满足二叉搜索树的条件即可;
左子树的所有节点的值小于根节点的值
右子树所有节点的值大于根节点的值
但是这里并不仅仅只是比较根节点和左右节点的值满足条件即可,它是要在整棵二叉树上都满足条件的,因此对于每个节点的取值应该有一个边界范围,例如:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hCymzVOj-1601715451019)(D:\我的博客\刷题\img\leetCode98图示1.png)]
因此在递归的时候返回false时就不能只是比较左右节点和父亲节点的大小了,具体怎么做也是看了大佬的代码之后才理解的,代码如下:
public boolean isBST(TreeNode root, long min, long max) {
if (root == null) {
return true;
}
if (root.val <= min || root.val >= max) {
return false;
}
return isBST(root.left, min, root.val) && isBST(root.right, root.val, max);
}
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
return isBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
}
实现思路如下:
先使用一个极大值和极小值充当边界的判断条件,确保整颗树的根节点值在这个范围内,这里使用Long类型的最大值是因为自己在代码提交的时候有个测试用例是int类型的最大值,导致错误。
程序第一进入isBST函数时,对于
root.val <= min || root.val >= max
该条件的bool值为真。则进入到下面的递归条件中。
而这个递归也被设置的很简洁,对于左子树的节点,其边界的最小值没有改变,而最大值设置为当前节点的值,即左子树的节点不能比当前节点的值大;对于右子树的节点,其边界的最大值没有改变,而最小值设置为当前节点的值,即右子树的节点不能比当前节点的值小。
判断条件判断每个节点的范围是否在(min, max),超出该范围则返回false,而边界条件的约束又由递归时候参数传递给出。
程序执行结果:
参考:小浩算法-BST及其验证
边栏推荐
- E-commerce project - mall time-limited seckill function system
- Build Zabbix Kubernetes cluster monitoring platform
- The "top pillar" slides, and new growth is extremely difficult to shoulder the heavy responsibility. Is Ali "squatting" to jump higher?
- 没想到MySQL还会问这些...
- 轮转数组问题:如何实现数组“整体逆序,内部有序”?“三步转换法”妙转数组
- Design and Realization of Employment Management System in Colleges and Universities
- 【FPGA】day19-二进制转换为十进制(BCD码)
- Homework 8.10 TFTP protocol download function
- Docker 链接sqlserver时出现en-us is an invalid culture错误解决方案
- rac备库双节点查询到的表最后更新时间不一致
猜你喜欢
DNS separation resolution and intelligent resolution
E-commerce project - mall time-limited seckill function system
A large horse carries 2 stone of grain, a middle horse carries 1 stone of grain, and two ponies carry one stone of grain. It takes 100 horses to carry 100 stone of grain. How to distribute it?
云平台下ESB产品开发步骤说明
高校就业管理系统设计与实现
I didn't expect MySQL to ask these...
Graphical LeetCode - 640. Solving Equations (Difficulty: Moderate)
轮转数组问题:如何实现数组“整体逆序,内部有序”?“三步转换法”妙转数组
CTO说MySQL单表行数不要超过2000w,为啥?
EasyCVR接入GB28181设备时,设备接入正常但视频无法播放是什么原因?
随机推荐
uni-app - 获取汉字拼音首字母(根据中文获取拼音首字母)
互换性测量技术-几何误差
What should I do if the channel ServerID is incorrect when EasyCVR is connected to a Hikvision Dahua device and selects another cluster server?
【FPGA】SDRAM
A large horse carries 2 stone of grain, a middle horse carries 1 stone of grain, and two ponies carry one stone of grain. It takes 100 horses to carry 100 stone of grain. How to distribute it?
Unity2D animation (1) introduction to Unity scheme - animation system composition and the function of use
Ten Advanced Concepts of SQL Development
【FPGA】day20-I2C读写EEPROM
Leetcode 669. 修剪二叉搜索树
互换性与测量技术-公差原则与选用方法
CTO said that the number of rows in a MySQL table should not exceed 2000w, why?
【FPGA】day18-ds18b20实现温度采集
oracle的基数会影响到查询速度吗?
高度塌陷问题的解决办法
Binary tree related code questions [more complete] C language
Homework 8.10 TFTP protocol download function
【FPGA】设计思路——I2C协议
没想到MySQL还会问这些...
阿里低代码框架 lowcode-engine 之自定义物料篇
80端口和443端口是什么?有什么区别?