//Metodo de buscar en el que utiliza recursividad para poder buscar en cada nodo protected Nodo buscar(Nodo raizSub, Comparador buscado, int cont) { if (raizSub == null) { return(null); } else if (buscado.firstSame(raizSub.valorNodo(), cont)) { return(raizSub); } else if (buscado.firstIdMenor(raizSub.valorNodo(), cont)) { return(buscar(raizSub.subarbolIzq(), buscado, cont + 1)); } else if (buscado.firstIdMayor(raizSub.valorNodo(), cont)) { return(buscar(raizSub.subarbolDch(), buscado, cont + 1)); } return(null); }
private NodoAvl insertarAvl(NodoAvl raiz, Comparador dt, Logical h) { NodoAvl n1; if (raiz == null) { raiz = new NodoAvl(dt); h.enviarLogica(true); } else if (dt.firstIdMenor(raiz.valorNodo(), 0)) { NodoAvl iz; iz = insertarAvl((NodoAvl)raiz.subarbolIzq(), dt, h); raiz.ramaIzq(iz); //De verificar la rama izquierda en donde se insertara el nodo if (h.valorLogico())//obtiene un dato para verificar si hay datos { switch (raiz.fe) { case 1: raiz.fe = 0; h.enviarLogica(false); break; case 0: raiz.fe = -1; break; case -1: // aplicar rotación a la izquierda n1 = (NodoAvl)raiz.subarbolIzq(); if (n1.fe == -1) { raiz = rotacionII(raiz, n1); } else { raiz = rotacionID(raiz, n1); } h.enviarLogica(false); break; } } } else if (dt.firstIdMayor(raiz.valorNodo(), 0)) { NodoAvl dr; dr = insertarAvl((NodoAvl)raiz.subarbolDch(), dt, h); raiz.ramaDch(dr); if (h.valorLogico()) { switch (raiz.fe) { case 1: // aplicar rotación a la derecha n1 = (NodoAvl)raiz.subarbolDch(); if (n1.fe == +1) { raiz = rotacionDD(raiz, n1); } else { raiz = rotacionDI(raiz, n1); } h.enviarLogica(false); break; case 0: raiz.fe = +1; break; case -1: raiz.fe = 0; h.enviarLogica(false); break; } } } else { throw new Exception("No puede haber claves repetidas "); } return(raiz); }