Skip to content

验证二叉搜索树

LeetCode-98

js
var isValidBST = function(root) {
  function inorder(node, min, max) {
    // 递归到叶子节点, 没有子节点了 说明满足二叉搜索树条件
    if(node === null) return true

    // 如果是左子树则看是否比根节点大。如果左子树的val比根的val大,说明不满足条件
    // 如果是右子树则看是否比根节点小。如果右子树的val比根的val小,说明不满足条件
    if(node.val >= max || node.val <= min) return false

    return (
      // 先递归左子树, min 不变(比较时用不上),node.val为max,判断是否大于等于根节点。如果左子树的val比根的val大,说明不满足条件
      inorder(node.left, min, node.val)
      &&
      // 再递归右子树, max 不用变了(比较时用不上),node.val为min,判断是否小于等于根节点。如果右子树的val比根的val小,说明不满条件
      inorder(node.right, node.val, max)
    )
  }
  return inorder(root, -Infinity, Infinity)
}