private BSTEntry<K, V> removeElem(BSTEntry<K, V> top, K key) {
		if (top == null) {
			throw new NoSuchElementException("Key: " + key + " not found - remove");
		}
		
		int comp = key.compareTo(top.getKey());
		if (comp == 0) {
			top = deleteElem(top);
			size--;
		} else if (comp > 0) {
			top.setRight(removeElem(top.getRight(), key));
		} else {
			top.setLeft(removeElem(top.getLeft(), key));
		}
		return top;
	}