当前位置:网站首页>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及其验证
边栏推荐
- 你不知道的 console.log 替代品
- The impact of programmatic trading and subjective trading on the profit curve!
- C语言 recv()函数、recvfrom()函数、recvmsg()函数
- 什么是三方支付?
- Multi-serial port RS485 industrial gateway BL110
- 基于改进YOLOv5轻量化的烟火检测
- 高度塌陷问题的解决办法
- The development of the massage chair control panel makes the massage chair simple and intelligent
- 索引的创建、查看、删除
- The solution to the height collapse problem
猜你喜欢
随机推荐
es-head插件插入查询以及条件查询(五)
用户如何克服程序化交易中的情绪问题?
机器学习怎么学?机器学习流程
LeetCode热题(12.买卖股票的最佳时机)
Binary tree related code questions [more complete] C language
“顶梁柱”滑坡、新增长极难担重任,阿里“蹲下”是为了跳更高?
AI + medical: for medical image recognition using neural network analysis
KingbaseES有什么办法,默认不读取sys_catalog下的系统视图?
构建程序化交易系统需要注意什么问题?
C语言 recv()函数、recvfrom()函数、recvmsg()函数
What is third-party payment?
"Life Is Like First Seen" is ill-fated, full of characters, and the contrast of Zhu Yawen's characters is too surprising
pathman_config、pathman_config_params 删除后,如何重建?
【Yugong Series】August 2022 Go Teaching Course 036-Type Assertion
Day20 FPGA 】 【 - block the I2C read and write EEPROM
互换性与测量技术——表面粗糙度选取和标注方法
C language recv() function, recvfrom() function, recvmsg() function
DNS separation resolution and intelligent resolution
[DB operation management/development solution] Shanghai Daoning provides you with an integrated development tool to improve the convenience of work - Orange
font








