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); }
private NodoAvl insertarDatoAvl(NodoAvl objRaizAvl, comparador nuevoDato, Logical objLogico) //throws Exception { NodoAvl n1; if (objRaizAvl == null) { objRaizAvl = new NodoAvl(nuevoDato); objLogico.setLogical(true); } else if (nuevoDato.menorQue(objRaizAvl.valorNodo())) { NodoAvl iz; iz = insertarDatoAvl((NodoAvl)objRaizAvl.subArbolIzdo(), nuevoDato, objLogico); objRaizAvl.ramaIzdo(iz); // regreso por los nodos del camino de búsqueda if (objLogico.booleanValue()) { // decrementa el fe por aumentar la altura de rama izquierda switch (objRaizAvl.fe) { case 1: objRaizAvl.fe = 0; objLogico.setLogical(false); break; case 0: objRaizAvl.fe = -1; break; case -1: // aplicar rotación a la izquierda n1 = (NodoAvl)objRaizAvl.subArbolIzdo(); if (n1.fe == -1) { objRaizAvl = rotacionII(objRaizAvl, n1); } else { objRaizAvl = rotacionID(objRaizAvl, n1); } objLogico.setLogical(false); break; } } } else if (nuevoDato.mayorQue(objRaizAvl.valorNodo())) { NodoAvl dr; dr = insertarDatoAvl((NodoAvl)objRaizAvl.subArbolDrcho(), nuevoDato, objLogico); objRaizAvl.ramaDcho(dr); // regreso por los nodos del camino de búsqueda if (objLogico.booleanValue()) { // incrementa el fe por aumentar la altura de rama izquierda switch (objRaizAvl.fe) { case 1: // aplicar rotación a la derecha n1 = (NodoAvl)objRaizAvl.subArbolDrcho(); if (n1.fe == +1) { objRaizAvl = rotacionDD(objRaizAvl, n1); } else { objRaizAvl = rotacionDI(objRaizAvl, n1); } objLogico.setLogical(false); break; case 0: objRaizAvl.fe = +1; break; case -1: objRaizAvl.fe = 0; objLogico.setLogical(false); break; } } } else { throw new Exception("No puede haber claves repetidas "); } return(objRaizAvl); }