LeetCode-in-All

98. Validate Binary Search Tree

Medium

Given the root of a binary tree, determine if it is a valid binary search tree (BST).

A valid BST is defined as follows:

Example 1:

Input: root = [2,1,3]

Output: true

Example 2:

Input: root = [5,1,4,null,null,3,6]

Output: false

Explanation: The root node’s value is 5 but its right child’s value is 4.

Constraints:

Solution

require_relative '../../com_github_leetcode/tree_node'

# @param {String} string
# @return {String}
def is_valid_bst(root)
  solve_bst(root, -Float::INFINITY, Float::INFINITY)
end

# We'll pass a valid range and check if the root lies within it,
# updating the range for the subtrees
def solve_bst(root, left, right)
  return true if root.nil?

  if root.val <= left || root.val >= right
    return false
  end

  solve_bst(root.left, left, root.val) && solve_bst(root.right, root.val, right)
end