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 nodo Insertar(nodo raizSub, comparador dato) { if (raizSub == null) { raizSub = new nodo(dato); } else if (dato.menorIgualQue(raizSub.valorNodo())) { nodo iz; iz = Insertar(raizSub.subarbolIzquierdo(), dato); raizSub.ramaIzda(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { nodo dr; dr = Insertar(raizSub.subarbolDerecho(), dato); raizSub.ramaDcho(dr); } return(raizSub); }
private 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); raiz.ramaIzda(iz); } else if (dato.mayorQue(raizSub.valorNodo())) { nodo dr; dr = eliminar(raizSub.subarbolDerecho(), dato); raizSub.ramaDcho(dr); } else //Nodo encontrado { nodo q; q = raizSub; if (q.subarbolIzquierdo() == null) { raizSub = q.subarbolDerecho(); } else if (q.subarbolDerecho() == null) { raizSub = q.subarbolIzquierdo(); } else //tiene rama ezquierda y derecha { q = reemplazar(q); } q = null; } return(raizSub); }
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); }