private NodoArbolAVL reemplazar(NodoArbolAVL n, NodoArbolAVL act, Logical cambiaAltura) { if (act.getDerecho() != null) { NodoArbolAVL d; d = reemplazar(n, (NodoArbolAVL)act.getDerecho(), cambiaAltura); act.setDerecho(d); if (cambiaAltura.booleanValue()) { act = equilibrar2(act, cambiaAltura); } } else { n.setValor(act.getValor()); n = act; act = (NodoArbolAVL)act.getIzquierdo(); n = null; cambiaAltura.setLogical(true); } return(act); }
private NodoArbolAVL insertarAvl(NodoArbolAVL raiz, Comparador dt, Logical h) { NodoArbolAVL n1; if (raiz == null) { raiz = new NodoArbolAVL(dt); h.setLogical(true); } else if (dt.menorQue(raiz.getValor())) { NodoArbolAVL iz; iz = insertarAvl((NodoArbolAVL)raiz.getIzquierdo(), dt, h); raiz.setIzquierdo(iz); // regreso por los nodos del camino de búsqueda if (h.booleanValue()) { // decrementa el fe por aumentar la altura de rama izquierda switch (raiz.getFactorEquilibrio()) { case 1: raiz.setFactorEquilibrio(0); h.setLogical(false); break; case 0: raiz.setFactorEquilibrio(-1); break; case -1: // aplicar rotación a la izquierda n1 = (NodoArbolAVL)raiz.getIzquierdo(); if (n1.getFactorEquilibrio() == -1) { raiz = rotacionII(raiz, n1); } else { raiz = rotacionID(raiz, n1); } h.setLogical(false); break; } } } else if (dt.mayorQue(raiz.getValor())) { NodoArbolAVL dr; dr = insertarAvl((NodoArbolAVL)raiz.getDerecho(), dt, h); raiz.setDerecho(dr); // regreso por los nodos del camino de búsqueda if (h.booleanValue()) { // incrementa el fe por aumentar la altura de rama izquierda switch (raiz.getFactorEquilibrio()) { case 1: // aplicar rotación a la derecha n1 = (NodoArbolAVL)raiz.getDerecho(); if (n1.getFactorEquilibrio() == +1) { raiz = rotacionDD(raiz, n1); } else { raiz = rotacionDI(raiz, n1); } h.setLogical(false); break; case 0: raiz.setFactorEquilibrio(+1); break; case -1: raiz.setFactorEquilibrio(0); h.setLogical(false); break; } } } else { throw new Exception("No puede haber claves repetidas "); } return(raiz); }