protected 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); raizSub.ramaIzquierda(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { nodo dr; dr = eliminar(raizSub.subarbolDerecho(), dato); raizSub.ramaDerecha(dr); } else { nodo q; q = raizSub; //este es el nodo que se quita del árbol if (q.subarbolIzquierdo() == null) { raizSub = q.subarbolDerecho(); } else if (q.subarbolDerecho() == null) { raizSub = q.subarbolIzquierdo(); } else// tiene rama izquierda y derecha { q = reemplazar(q); } q = null; } return(raizSub); }//end eliminar
}//end eliminar protected 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.ramaIzquierda(a.subarbolIzquierdo()); } else { p.ramaDerecha(a.subarbolDerecho()); } return(a); } //end nodo reemplazar