private nodo eliminar(nodo raizSub, comparador dato) { if (raizSub == null) { throw new Exception("No hay nodo para eliminar"); } else if (dato.menorQue(raizSub.valorNodo())) { nodo iz; iz = eliminar(raizSub.subarbolIzquierdo(), dato); raiz.ramaIzda(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { nodo dr; dr = eliminar(raizSub.subarbolDerecho(), dato); raizSub.ramaDcho(dr); } else //Nodo encontrado { nodo q; q = raizSub; if (q.subarbolIzquierdo() == null) { raizSub = q.subarbolDerecho(); } else if (q.subarbolDerecho() == null) { raizSub = q.subarbolIzquierdo(); } else //tiene rama ezquierda y derecha { q = reemplazar(q); } q = null; } return(raizSub); }
private nodo reemplazar(nodo act) { nodo a, p; p = act; a = act.subarbolIzquierdo(); //rama de nodos menores while (a.subarbolDerecho() != null) { p = a; p.subarbolDerecho(); } act.nuevoValor(a.valorNodo()); if (p == act) { p.ramaIzda(a.subarbolIzquierdo()); } else { p.ramaDcho(a.subarbolIzquierdo()); } return(a); }