def _is_bst(root, min_value=float('-inf'), max_value=float('inf')):
    """Check if the binary tree is a BST (binary search tree).

    :param root: Root node of the binary tree.
    :type root: binarytree.Node | None
    :param min_value: Minimum node value seen.
    :type min_value: int | float
    :param max_value: Maximum node value seen.
    :type max_value: int | float
    :return: True if the binary tree is a BST, False otherwise.
    :rtype: bool
    """
    if root is None:
        return True
    return (
        min_value < root.value < max_value and
        _is_bst(root.left, min_value, root.value) and
        _is_bst(root.right, root.value, max_value)
    )