【leetcode】98. 验证二叉搜索树

37 阅读1分钟

leetcode-98.png

  • 左子节点的值必须小于当前节点的值,因此它的上限为当前节点的值。

  • 右子节点的值必须大于当前节点的值,因此它的下限为当前节点的值。

这里最主要的是 isValid 里面的 return,这里的逻辑判断
如果是进入左子树,那么就需要判断 左子树.val 和它的 父节点.val 的大小,因为是父节点,肯定需要比左子树大,同理于右子树。

还有一个地方,写代码的时候需要注意,这里的 if 判断中, 不能直接用 (min && node.val <= min) 主要是遇到 min = 0 的时候,这里会判 false

var isValidBST = function (root) {
    var isValid = function (node, min, max) {
        if (!node) return true
        if (min !== null && node.val <= min) return false
        if (max !== null && node.val >= max) return false
        return isValid(node.left, min, node.val) && isValid(node.right, node.val, max)
    }
    return isValid(root, null, null)
};Ï