给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
示例1:
输入:root = [2,1,3]
输出:true
示例2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
树中节点数目范围在[1, 104] 内
-231 <= Node.val <= 231 - 1
根据搜索二叉树的定义可知,需要递归的判断某个节点的值是否在 (左节点的值,右节点的值) 这个区间之间。
声明一个函数,helper(root, small, larger),接收 small 和 larger 两个参数,
函数内容是判断当前节点是否符合搜索二叉树的定义,如果符合返回 true 不符合返回 false
然后循环递归的调用 helper,即可。
var isValidBST = function(root) {
const helper = (root, smaller, larger) => {
if (root === null) return true
if (root.val <= smaller || root.val >= larger) {
return false
} else {
return helper(root.left, smaller, root.val) && helper(root.right, root.val, larger)
}
}
return helper(root, -Infinity, Infinity)
};