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; }