private NodoAvl rotacionDI(NodoAvl n, NodoAvl n1) { NodoAvl n2; n2 = (NodoAvl)n1.subarbolIzdo(); n.ramaDcho(n2.subarbolIzdo()); n2.ramaIzdo(n); n1.ramaIzdo(n2.subarbolDcho()); n2.ramaDcho(n1); // actualización de los factores de equilibrio if (n2.fe == +1) { n.fe = -1; } else { n.fe = 0; } if (n2.fe == -1) { n1.fe = 1; } else { n1.fe = 0; } n2.fe = 0; return(n2); }
public void insertar(Object valor) //throws Exception { Comparador dato; Logical h = new Logical(false); // intercambia un valor booleano dato = (Comparador)valor; raiz = insertarAvl(raiz, dato, h); }
private NodoAvl insertarAvl(NodoAvl raiz, Comparador dt, Logical h) { // NodoAvl n1; if (raiz == null) { raiz = new NodoAvl(dt); h.setLogical(true); } else if (dt.menorNumero(raiz.valorNodo())) { ramaDerecha(raiz, dt, h); } else if (dt.mayorNumero(raiz.valorNodo())) { ramaIzquierda(raiz, dt, h); } // raiz 1 Guatemala loclla // derecho 1. zacapa lolo // 1 zacapa papa else if (dt.igualque(raiz.valorNodo())) { if (dt.departamentoMayor(raiz.valorNodo())) { raiz = ramaDerecha(raiz, dt, h); } else if (dt.departamentoMenor(raiz.valorNodo())) { raiz = ramaIzquierda(raiz, dt, h); } else if (dt.departamentoIgual(raiz.valorNodo())) { if (dt.nombreAlfabeticoDer(raiz.valorNodo())) { raiz = ramaDerecha(raiz, dt, h); } else if (dt.nombreAlfabeticoIzq(raiz.valorNodo())) { raiz = ramaIzquierda(raiz, dt, h); } } } else { throw new Exception("No puede haber claves repetidas "); } return(raiz); }
private NodoAvl rotacionDD(NodoAvl n, NodoAvl n1) { n.ramaDcho(n1.subarbolIzdo()); n1.ramaIzdo(n); // actualización de los factores de equilibrio if (n1.fe == +1) // se cumple en la inserción { n.fe = 0; n1.fe = 0; } else { n.fe = +1; n1.fe = -1; } return(n1); }
private NodoAvl ramaDerecha(NodoAvl raiz, Comparador dt, Logical h) { NodoAvl n1; NodoAvl dr; dr = insertarAvl((NodoAvl)raiz.subarbolDcho(), dt, h); raiz.ramaDcho(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.fe) { case 1: // aplicar rotación a la derecha n1 = (NodoAvl)raiz.subarbolDcho(); if (n1.fe == +1) { raiz = rotacionDD(raiz, n1); } else { raiz = rotacionDI(raiz, n1); } h.setLogical(false); break; case 0: raiz.fe = +1; break; case -1: raiz.fe = 0; h.setLogical(false); break; } } return(raiz); }
public static NodoAvl nuevoArbol(NodoAvl ramaIzqda, Object dato, NodoAvl ramaDrcha) { return(new NodoAvl(dato, ramaIzqda, ramaDrcha)); }
public ArbolAVL() { raiz = null; }
public NodoAvl(Object valor, NodoAvl ramaIzdo, NodoAvl ramaDcho) : base(ramaIzdo, valor, ramaDcho) { fe = 0; }