// método interno para susutituir por el mayor de los menores private Nodo reemplazar(Nodo act) { Nodo a, p; p = act; a = act.subarbolIzdo(); // rama de nodos menores while (a.subarbolDcho() != null) { p = a; a = a.subarbolDcho(); } act.nuevoValor(a.valorNodo()); if (p == act) { p.ramaIzdo(a.subarbolIzdo()); } else { p.ramaDcho(a.subarbolIzdo()); } return(a); }
//método interno para realizar la operación protected Nodo eliminar(Nodo raizSub, Comparador dato) { if (raizSub == null) { throw new Exception("No encontrado el nodo con la clave"); } else if (dato.menorQue(raizSub.valorNodo())) { Nodo iz; iz = eliminar(raizSub.subarbolIzdo(), dato); raizSub.ramaIzdo(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { Nodo dr; dr = eliminar(raizSub.subarbolDcho(), dato); raizSub.ramaDcho(dr); } else // Nodo encontrado { Nodo q; q = raizSub; // nodo a quitar del árbol if (q.subarbolIzdo() == null) { raizSub = q.subarbolDcho(); } else if (q.subarbolDcho() == null) { raizSub = q.subarbolIzdo(); } else { // tiene rama izquierda y derecha q = reemplazar(q); } q = null; } return(raizSub); }