Pass valid range bounds through recursion. Each node must fall within its allowed range.
For the root, the range is (-∞, +∞). When going left, update the upper bound to the current node's value. When going right, update the lower bound to the current node's value.
If any node falls outside its range, return false.
Alternatively, do an in-order traversal. For a valid BST, in-order traversal produces values in strictly increasing order.