public T buscar(T dato) {
   NodoBinario<T> result = this.buscar(dato, this.getRaiz());
   if (result != null) {
     return result.getDato();
   }
   return null;
 }
  private NodoBinario<T> buscarMayorDeMenores(NodoBinario<T> nodo) {
    NodoBinario<T> abb = nodo.getHijoIzquierdo();
    while (abb.getHijoDerecho() != null)
      abb = abb.getHijoDerecho(); // muevo siempre por la rama rerecha

    return abb;
  }
 private NodoBinario<T> buscar(Comparable<T> x, NodoBinario<T> t) {
   if (t != null) {
     if (x.compareTo(t.getDato()) < 0) {
       t = this.buscar(x, t.getHijoIzquierdo());
     } else if (x.compareTo(t.getDato()) > 0) {
       t = this.buscar(x, t.getHijoDerecho());
     } else ; // Se encontro el nodo, asi que es t
     return t;
   } else {
     return null;
   }
 }
  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;
  }