function is_valid_bst(node, low, high):

   if node is null:
      return true
   if node.value <= low or node.value >= high:
      return false # everything left < node < everything right
   return is_valid_bst(node.left, low, node.value) and \
       is_valid_bst(node.right, node.value, high)
