public Nodo_S_P Izquierda(Precio_Sucursal[] Aux, int intermedio, int ID_padre)
        {
            //Izquierda
            Nodo_S_P izq = new Nodo_S_P(grado, entrar);

            izq.ID    = identificador;
            izq.padre = ID_padre;
            identificador++;
            for (int i = 0; i < intermedio; i++)
            {
                izq.values[i] = Aux[i];
            }
            return(izq);
        }
        public Nodo_S_P Derecha(Precio_Sucursal[] Aux, int intermedio, int ID_padre)
        {
            //derecha
            Nodo_S_P der = new Nodo_S_P(grado, entrar);

            der.ID    = identificador;
            der.padre = ID_padre;
            identificador++;
            int num = 0;

            for (int i = intermedio + 1; i < Aux.Length; i++)
            {
                der.values[num] = Aux[i];
                num++;
            }
            return(der);
        }
        public void Insertar(int ID_S, int ID_P, int Cantidad)
        {
            Inserciones++;
            int num          = 0;
            int validar_Hijo = 0;

            if (entrar)
            {
                raiz           = new Nodo_S_P(grado, entrar);
                entrar         = false;
                raiz.values[0] = new Precio_Sucursal()
                {
                    identificador = ID_S + ID_P,
                    ID_S          = ID_S,
                    ID_P          = ID_P,
                    cantidad      = Cantidad
                };
                raiz.ID = identificador;
                identificador++;
                Arbollista.Add(raiz);
            }
            else
            {
                if (raiz.hijos[validar_Hijo] != null)
                {
                    // Ir a la Izquierda
                    if (identificador < raiz.values[identificador - 4].identificador)
                    {
                        Insertar_Izquierda(ID_S, ID_P, Cantidad);
                    }
                    // Ir a la derecha
                    else
                    {
                        Insertar_derecha(ID_S, ID_P, Cantidad);
                    }
                    // aumentar para poder entrar 2
                    validar_Hijo = validar_Hijo + 2;
                }
                else
                {
                    foreach (var espacio in raiz.values)
                    {
                        if (espacio == null && num < valor)
                        {
                            raiz.values[num] = new Precio_Sucursal()
                            {
                                identificador = ID_S + ID_P,
                                ID_S          = ID_S,
                                ID_P          = ID_P,
                                cantidad      = Cantidad
                            };
                            Arbollista.Add(raiz);
                            break;
                        }
                        num++;
                        if (num == valor) /// full
                        {
                            // crear un auxiliar
                            Precio_Sucursal[] Auxiliar_ = Auxiliar(ID_S, ID_P, Cantidad, raiz.values);
                            // dividir el auxiliar
                            int intermedio = Auxiliar_.Length / 2;
                            //Izquierda hasta la mitad
                            raiz.hijos[0] = Izquierda(Auxiliar_, intermedio, raiz.ID);
                            //derecha hasta la mtad
                            raiz.hijos[1] = Derecha(Auxiliar_, intermedio, raiz.ID);
                            // vaciar raiz
                            Array.Clear(raiz.values, 0, raiz.values.Length);
                            //Asignar nuevo dato a raiz
                            raiz.values[0] = Auxiliar_[intermedio];
                            Arbollista.Add(raiz);
                            //componer esta parte
                            Arbollista.Add(raiz.hijos[0]);
                            Arbollista.Add(raiz.hijos[1]);
                        }
                    }
                }
                raiz.values = Ordenar(raiz.values);
            }
            Escribir();
            // limpiar la lista para que no se repita
            Arbollista.Clear();
        }
        public void Insertar_derecha(int ID_S, int ID_P, int Cantida)
        {
            int num = 0;

            foreach (var espacio in raiz.hijos[identificador - 3].values)
            {
                if (espacio == null && num < grado - 1)
                {
                    raiz.hijos[identificador - 3].values[num] = new Precio_Sucursal()
                    {
                        identificador = ID_S + ID_P,
                        ID_S          = ID_S,
                        ID_P          = ID_P,
                        cantidad      = Cantida
                    };
                    raiz.hijos[identificador - 3].values = Ordenar(raiz.hijos[identificador - 3].values);
                    /// Ingresar nueva lista
                    Arbollista.Add(raiz);
                    Arbollista.Add(raiz.hijos[identificador - 4]);
                    Arbollista.Add(raiz.hijos[identificador - 3]);
                    break;
                }
                num++;
                // esta lleno
                if (num == grado - 1)
                {
                    if (raiz.hijos[identificador - 2] != null)
                    {
                        foreach (var disponibilidad in raiz.hijos[identificador - 2].values)
                        {
                            if (disponibilidad == null)
                            {
                                //encontrar ultima posicion de la raiz
                                int contador = 0;
                                while (raiz.values[contador] != null)
                                {
                                    contador++;
                                }
                                // bajar dato a hijo derecho
                                Insertar_derecha(raiz.values[contador - 1].ID_S, raiz.values[contador - 1].ID_P, raiz.values[contador - 1].cantidad);
                                //borrar la ultima posicion de la raiz
                                Array.Clear(raiz.values, contador - 1, contador - 1);
                                //colocar nueva raiz
                                raiz.values[contador - 1] = new Precio_Sucursal()
                                {
                                    identificador = ID_S + ID_P, ID_S = ID_S, ID_P = ID_P, cantidad = Cantida
                                };
                                break;
                            }
                        }
                    }
                    else
                    {
                        Nodo_S_P der = new Nodo_S_P(grado, entrar);
                        der.ID    = identificador;
                        der.padre = raiz.ID;
                        raiz.hijos[identificador - 2] = der;
                        identificador++;
                        //Crear un auxiliar
                        Precio_Sucursal[] Aux_ = Auxiliar(ID_S, ID_P, Cantida, raiz.hijos[identificador - 4].values);
                        //borar derecha
                        Array.Clear(raiz.hijos[identificador - 3].values, 0, grado - 1);
                        // subir penultima posicion
                        int nuevo_num = 0;
                        foreach (var espacio_ in raiz.values)
                        {
                            if (espacio_ == null)
                            {
                                raiz.values[nuevo_num] = Aux_[5];
                                break;
                            }
                            nuevo_num++;
                        }
                        for (int i = 0; i < 5; i++)
                        {
                            raiz.hijos[identificador - 4].values[i] = Aux_[i];
                        }
                        // colocar ultimo dato
                        der.values[0] = Aux_[6];
                    }
                }
            }
        }