Tree Traversal Target: 10s
Pass valid range [lo, hi) down. Left child must be < root, right must be > root. Check entire subtree, not just children.
def isValidBST(root):
def dfs(node, lo, hi):
if not node: return True
if node.val <= lo or node.val >= hi:
return False
return (dfs(node.left, lo, node.val) and
dfs(node.right, node.val, hi))
return dfs(root, float('-inf'), float('inf'))
Type it from memory. Go.