Beispiel #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="valor"></param>
 /// <param name="Nodo"></param>
 public void AgregarYOrdenarNodo(Vehiculo valor, NodoB Nodo)
 {
     Nodo.Datos.Add(valor);
     Nodo.Datos.Sort((x, y) => x.CompareTo(y));
 }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="Nodo"></param>
        public void Separar(NodoB Nodo)
        {
            NodoB izq      = new NodoB();
            NodoB padreAux = new NodoB();
            NodoB der      = new NodoB();

            CreandoNodo(izq, Nodo);
            CreandoNodo(der, Nodo);

            for (int i = 0; i < Nodo.Minimo; i++)
            {
                izq.Datos.Add(Nodo.Datos[i]);
            }

            for (int i = Nodo.Minimo + 1; i <= Nodo.Maximo; i++)
            {
                der.Datos.Add(Nodo.Datos[i]);
            }


            if (Nodo.Padre != null) //Si es cualquier hijo
            {
                PadreHijo(Nodo.Padre, izq);
                PadreHijo(Nodo.Padre, der);

                Nodo.Padre.Datos.Add(Nodo.Datos[Nodo.Minimo]);
                Nodo.Padre.Datos.Sort((x, y) => x.CompareTo(y));

                int indice = 0;

                for (int i = 0; i < Nodo.Padre.Nodos.Count; i++)
                {
                    if (Nodo.Padre.Nodos[i].Datos.Count > 4)
                    {
                        indice = i;
                        break;
                    }
                }

                if (Nodo.Nodos.Count > 0)
                {
                    HijosDeHijos(Nodo, izq, 0, Nodo.Minimo);
                    HijosDeHijos(Nodo, der, Nodo.Minimo + 1, Nodo.Maximo + 1);
                }

                Nodo.Padre.Nodos.RemoveAt(indice);
                Nodo.Padre.Nodos.Sort((x, y) => x.Datos[0].CompareTo(y.Datos[0]));
                Nodo = null;
            }//Si es la raiz y aun caben valores en el nodo
            else if (Nodo.Padre == null && Nodo.Nodos.Count < 5)
            {
                padreAux.Datos.Add(Nodo.Datos[Nodo.Minimo]);
                PadreHijo(Nodo, izq);
                PadreHijo(Nodo, der);
                Nodo.Datos.Sort((x, y) => x.CompareTo(y));
                Nodo.Datos = padreAux.Datos;
            }//Si es raiz y no caben valores
            else if (Nodo.Padre == null && Nodo.Nodos.Count >= 5)
            {
                Vehiculo val = Nodo.Datos[Nodo.Minimo];

                HijosDeHijos(Nodo, izq, 0, Nodo.Minimo);
                HijosDeHijos(Nodo, der, Nodo.Minimo + 1, Nodo.Maximo + 1);

                Nodo.Nodos.Clear();
                PadreHijo(Nodo, izq);
                PadreHijo(Nodo, der);

                Nodo.Datos.Clear();
                Nodo.Datos.Add(val);
            }
        }