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 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); }