小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
leetcode98-验证二叉搜索树
前文
本文为菜鸟的刷题记录,仅用作笔记使用,并非最佳解决方案。
题目信息
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
输入: root = [2,1,3]
输出: true
输入: root = [5,1,4,null,null,3,6]
输出: false
解释: 根节点的值是 5 ,但是右子节点的值是 4 。
解题思路分析
解法1:
二叉搜索树,主要具备的性质是左叶子节点的所有值要小于根节点的值,同时右叶子节点的所有值要大于根节点的值。因此当判断二叉树是否为二叉搜索树时,不仅要满足当前的父节点的值,还要对上层父节点的值进行关注。因此在比较的过程中,将上方节点的值,也就是节点的范围进行传递。每个节点都会有一个值的范围。只有满足该范围才能继续判断。以此方式进行递归判断即可验证二叉树是否为二叉搜索树。
public boolean isValidBST(TreeNode root) {
return isValid(root,Long.MIN_VALUE,Long.MAX_VALUE);
}
public boolean isValid(TreeNode node,long lower,long upper){
if(node == null){
return true;
}
if(node.val <= lower || node.val >= upper){
return false;
}else{
return isValid(node.left,lower,node.val) && isValid(node.right,node.val,upper);
}
}
复杂度分析
- 时间复杂度:o(n)
- 空间复杂度:o(1)
后记
- 千古兴亡多少事?悠悠。不尽长江滚滚流。