Пример #1
0
        private void Rotaciones(Nodo <T> N_dad, Delegate Comparador)
        {
            int Fact_Equi = Det_FactEqui(N_dad.Hijoder, N_dad.Hijoizq);

            if (Fact_Equi == 2)
            {
                if (Det_FactEqui(N_dad.Hijoder.Hijoder, N_dad.Hijoder.Hijoizq) == -1)
                {
                    //rotacion doble izquierda
                    Rot_Simple_Derecha(N_dad.Hijoder, Comparador);

                    if (N_dad == raiz)
                    {
                        Rot_Simple_Izquierda_Raiz(N_dad, Comparador);
                    }
                    else
                    {
                        Rot_Simple_Izquierda(N_dad, Comparador);
                    }
                }
                else
                {
                    //rotacion simple izquierda
                    if (N_dad == raiz)
                    {
                        Rot_Simple_Izquierda_Raiz(N_dad, Comparador);
                    }
                    else
                    {
                        Rot_Simple_Izquierda(N_dad, Comparador);
                    }
                }
            }
            if (Fact_Equi == -2)
            {
                if (Det_FactEqui(N_dad.Hijoizq.Hijoder, N_dad.Hijoizq.Hijoizq) == 1)
                {
                    //rotacion doble derecha
                    Rot_Simple_Izquierda(N_dad.Hijoizq, Comparador);

                    if (N_dad == raiz)
                    {
                        Rot_Simple_Derecha_Raiz(N_dad, Comparador);
                    }
                    else
                    {
                        Rot_Simple_Derecha(N_dad, Comparador);
                    }
                }
                else
                {
                    //rotacion simple derecha
                    if (N_dad == raiz)
                    {
                        Rot_Simple_Derecha_Raiz(N_dad, Comparador);
                    }
                    else
                    {
                        Rot_Simple_Derecha(N_dad, Comparador);
                    }
                }
            }
            if (Fact_Equi > 2 || Fact_Equi < -2)
            {
                int fact = Fact_Equi;
                //He flipado
            }
            else
            {
                //No pasa nada oiga
            }
        }
Пример #2
0
        private void Metodo_Eliminacion(int tipo, Nodo <T> Nodo_Borrar, Delegate Comparar)
        {
            int valor_com = (int)Comparar.DynamicInvoke(Nodo_Borrar.Padre.Valor, Nodo_Borrar.Valor);

            if (tipo == 0)
            {
                if (valor_com < 0)
                {
                    Nodo_Borrar.Padre.Hijoder = null;
                }
                else
                {
                    Nodo_Borrar.Padre.Hijoizq = null;
                }
            }
            if (tipo == 1)
            {
                if (Nodo_Borrar.Hijoder != null)
                {
                    if (valor_com < 0)
                    {
                        Nodo_Borrar.Padre.Hijoder = Nodo_Borrar.Hijoder;
                    }
                    else
                    {
                        Nodo_Borrar.Padre.Hijoizq = Nodo_Borrar.Hijoder;
                    }
                    Nodo_Borrar.Hijoder.Padre = Nodo_Borrar.Padre;
                }
                else
                {
                    if (valor_com < 0)
                    {
                        Nodo_Borrar.Padre.Hijoder = Nodo_Borrar.Hijoizq;
                    }
                    else
                    {
                        Nodo_Borrar.Padre.Hijoizq = Nodo_Borrar.Hijoizq;
                    }
                    Nodo_Borrar.Hijoizq.Padre = Nodo_Borrar.Padre;
                }
            }
            if (tipo == 2)
            {
                Nodo <T> Mayor_Izq = Obtener_MayorIzq(Nodo_Borrar.Hijoizq);
                Buscar_Nodo_Eliminar(Mayor_Izq.Padre, Mayor_Izq, Comparar);
                if (valor_com < 0)
                {
                    Nodo_Borrar.Padre.Hijoder = Mayor_Izq;
                }
                else
                {
                    Nodo_Borrar.Padre.Hijoizq = Mayor_Izq;
                }
                Mayor_Izq.Padre         = Nodo_Borrar.Padre;
                Mayor_Izq.Hijoder       = Nodo_Borrar.Hijoder;
                Mayor_Izq.Hijoizq       = Nodo_Borrar.Hijoizq;
                Mayor_Izq.Hijoder.Padre = Mayor_Izq;
                Mayor_Izq.Hijoizq.Padre = Mayor_Izq;
                Mayor_Izq.Altura        = Det_Altura(Mayor_Izq.Hijoder, Mayor_Izq.Hijoizq);
            }
        }