예제 #1
0
 //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);
 }
예제 #2
0
        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);
        }