public static <T extends Comparable<T>> BasicNode<T> searchNodeWithValue(
      BasicNode<T> root,
      T valueToSearch) {
    if (null == root || null == valueToSearch) {
      throw new IllegalArgumentException("Root or value to be inserted can not be null.");
    }
    if (root.getValue().equals(valueToSearch)) {
      return root;
    }

    BasicNode<T> parentNode = getParentNodeOrNull(root, valueToSearch);
    if (null != parentNode) {
      if (parentNode.hasLeft() && parentNode.getLeft().getValue().equals(valueToSearch)) {
        return parentNode.getLeft();
      } else if (parentNode.hasRight() && parentNode.getRight().getValue().equals(valueToSearch)) {
        return parentNode.getRight();
      }
    }
    return null;
  }