private E findKey(BinaryTreeNode<E> current, E key) throws ValueException {
		if (root == null) {// empty tree

			return null;
		}
		if (!isComparable(current.data, key)) {
			System.out.print(current.toString());
			System.out.print(key.toString());

			throw new ValueException("Key is not comparable!");
		}

		if (current.getData().compareTo(key) == 0) {// element is found
			return current.data;

		} else if (current.getData().compareTo(key) > 0) { // left side
			if (current.getLeft() == null) {
				return null;

			} else {
				return findKey(current.getLeft(), key);
			}

		} else if (current.getData().compareTo(key) < 0) { // right side
			if (current.getRight() == null) {

				return null;

			} else {
				return findKey(current.getRight(), key);
			}
		}
		return null;

	}