private NodoBinario<T> eliminarRecu(T dato, NodoBinario<T> nod) {
    if (dato == null) return nod; // no encontro
    if (nod.getDato().compareTo(dato) > 0) {
      if (nod.getHijoIzquierdo() != null)
        nod.setHijoIzquierdo(this.eliminarRecu(dato, nod.getHijoIzquierdo()));
    } else if (nod.getDato().compareTo(dato) < 0) {
      if (nod.getHijoDerecho() != null)
        nod.setHijoDerecho(this.eliminarRecu(dato, nod.getHijoDerecho()));
    } else if (nod.getDato().compareTo(dato) == 0) {
      if (nod.getHijoDerecho() != null && nod.getHijoIzquierdo() != null) {
        NodoBinario<T> nreemp = this.buscarMayorDeMenores(nod);
        nod.setDato(nreemp.getDato());
        nod.setHijoIzquierdo(this.eliminarRecu(nreemp.getDato(), nod.getHijoIzquierdo()));
      } else {
        if (nod.getHijoIzquierdo() != null) nod = nod.getHijoIzquierdo();
        else nod = nod.getHijoDerecho();
      }
    }

    return nod;
  }