Tree

66. Validate Binary Search Tree

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

A valid BST is defined as follows:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

Examples

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

  • The number of nodes in the tree is in the range [1, 10^4].
  • -2^31 <= Node.val <= 2^31 - 1

Dada la raiz root de un arbol binario, determina si es un arbol de busqueda binaria (BST) valido.

Un BST valido se define de la siguiente manera:

  • El subarbol izquierdo de un nodo contiene solo nodos con claves menores que la clave del nodo.
  • El subarbol derecho de un nodo contiene solo nodos con claves mayores que la clave del nodo.
  • Tanto el subarbol izquierdo como el derecho tambien deben ser arboles de busqueda binaria.

Ejemplos

Ejemplo 1

Entrada: root = [2,1,3]
Salida: true

Ejemplo 2

Entrada: root = [5,1,4,null,null,3,6]
Salida: false
Explicacion: El valor del nodo raiz es 5, pero el valor de su hijo derecho es 4.

Restricciones

  • El numero de nodos en el arbol esta en el rango [1, 10^4].
  • -2^31 <= Node.val <= 2^31 - 1
validate_binary_search_tree.py
# Validate Binary Search Tree
# Given a binary tree, determine if it is a valid BST.
# Each node must be within an allowed range (min, max) that updates as we go deeper.

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def is_valid_bst(node, min_val=float("-inf"), max_val=float("inf")):
    # An empty node is always valid
    if not node:
        return True

    # Check if current node is within its allowed range
    if node.val <= min_val or node.val >= max_val:
        return False

    # Left child must be less than current node (update max)
    # Right child must be greater than current node (update min)
    return (is_valid_bst(node.left, min_val, node.val) and
            is_valid_bst(node.right, node.val, max_val))

# Example 1: [2,1,3] -> true
tree1 = TreeNode(2, TreeNode(1), TreeNode(3))
print(is_valid_bst(tree1))  # True

# Example 2: [5,1,4,null,null,3,6] -> false
tree2 = TreeNode(5, TreeNode(1), TreeNode(4, TreeNode(3), TreeNode(6)))
print(is_valid_bst(tree2))  # False
Keyboard shortcuts
h Previous problem
l Next problem
Esc Back to index
? Toggle this help