private boolean helper(TreeNode root, int maxValue, int minValue) {

    if (root == null) {
      return true;
    }

    if (root.val < maxValue && root.val > minValue) {
      return helper(root.left, root.val, minValue) && helper(root.right, maxValue, root.val);
    }

    return false;
  }