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
Constraints
The number of nodes in the tree is in the range [1, 10^4].-2^31 <= Node.val <= 2^31 - 1
Approach
A node in a BST must satisfy constraints imposed by its ancestors. The root can have any value (between negative and positive infinity). When traversing left, the maximum allowed value becomes the parent's value. When traversing right, the minimum allowed value becomes the parent's value. We use a recursive function passing these lower and upper boundaries.
Complexity Analysis
This approach optimally checks constraints at every node.
class Solution { public boolean isValidBST(TreeNode root) { return valid(root, null, null); } // Use Integer class to allow null boundaries private boolean valid(TreeNode node, Integer low, Integer high) { if (node == null) return true; if (low != null && node.val <= low) { return false; } if (high != null && node.val >= high) { return false; } return valid(node.left, low, node.val) && valid(node.right, node.val, high); }}