private NodoAvl eliminarDatoAvl(NodoAvl r, comparador clave, Logical cambiaAltura) //throws Exception { if (r == null) { throw new Exception(" Nodo no encontrado "); } else if (clave.menorQue(r.valorNodo())) { NodoAvl iz; iz = eliminarDatoAvl((NodoAvl)r.subArbolIzdo(), clave, cambiaAltura); r.ramaIzdo(iz); if (cambiaAltura.booleanValue()) { r = equilibrar1(r, cambiaAltura); } } else if (clave.mayorQue(r.valorNodo())) { NodoAvl dr; dr = eliminarDatoAvl((NodoAvl)r.subArbolDrcho(), clave, cambiaAltura); r.ramaDcho(dr); if (cambiaAltura.booleanValue()) { r = equilibrar2(r, cambiaAltura); } } else // Nodo encontrado { NodoAvl q; q = r; // nodo a quitar del árbol if (q.subArbolIzdo() == null) { r = (NodoAvl)q.subArbolDrcho(); cambiaAltura.setLogical(true); } else if (q.subArbolDrcho() == null) { r = (NodoAvl)q.subArbolIzdo(); cambiaAltura.setLogical(true); } else { // tiene rama izquierda y derecha NodoAvl iz; iz = reemplazarAvl(r, (NodoAvl)r.subArbolIzdo(), cambiaAltura); r.ramaIzdo(iz); if (cambiaAltura.booleanValue()) { r = equilibrar1(r, cambiaAltura); } } q = null; } return(r); }
private NodoAvl reemplazarAvl(NodoAvl n, NodoAvl act, Logical cambiaAltura) { if (act.subArbolDrcho() != null) { NodoAvl d; d = reemplazarAvl(n, (NodoAvl)act.subArbolDrcho(), cambiaAltura); act.ramaDcho(d); if (cambiaAltura.booleanValue()) { act = equilibrar2(act, cambiaAltura); } } else { n.nuevoValor(act.valorNodo()); n = act; act = (NodoAvl)act.subArbolIzdo(); n = null; cambiaAltura.setLogical(true); } return(act); }