@Override
	public void delete(T elemento)
	{
		Nodo<T> atual = raiz;
		int comp = 0;
		while (atual != null) {
			comp = elemento.compareTo(atual.getElemento());
			if (comp < 0)
				atual = atual.getEsquerda();
			else if (comp > 0)
				atual = atual.getDireita();
			else
				break;
		}

		if (atual == null)
			return;

		if (atual.getEsquerda() != null && atual.getDireita() != null) {
			Nodo<T> pred = maxNodo(atual.getEsquerda());
			atual.setElemento(pred.getElemento());
			atual = pred;
		}

		Nodo<T> filho = (atual.getDireita() == null ? atual.getEsquerda() : atual.getDireita());
		if (filho != null)
			atual.setCor(filho.getCor());

		if (atual.isCorPreto())
			deleteCaso1(atual);
		substituirNodo(atual, filho);
	}