private BinarySearchTreeNode<T> performBinarySearch(T targetValue,
                                                      BinarySearchTreeNode<T> currentRootNode) {
    // BASE CASE
    if (currentRootNode == null) {
      return null;
    }

    // RECURSIVE CASE
    if (currentRootNode.getValue().compareTo(targetValue) == 0) {
      return currentRootNode;
    } else if (currentRootNode.getValue().compareTo(targetValue) > 0) {
      return performBinarySearch(targetValue, currentRootNode.getLeftChild());
    } else if (currentRootNode.getValue().compareTo(targetValue) < 0) {
      return performBinarySearch(targetValue, currentRootNode.getRightChild());
    }
    return null;
  }