public Nodo_P Izquierda(Producto[] Aux, int intermedio, int ID_padre)
        {
            //Izquierda
            Nodo_P izq = new Nodo_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_P Derecha(Producto[] Aux, int intermedio, int ID_padre)
        {
            //derecha
            Nodo_P der = new Nodo_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, string Name, string price)
        {
            Estructuras.Bestrella_Producto_Sucursal_.Instance.Productos.Add(ID);
            Inserciones++;
            int num          = 0;
            int validar_Hijo = 0;

            if (entrar)
            {
                raiz           = new Nodo_P(grado, entrar);
                entrar         = false;
                raiz.values[0] = new Producto()
                {
                    ID     = ID,
                    Nombre = Name,
                    Precio = price
                };
                raiz.ID = identificador;
                identificador++;
                Arbollista.Add(raiz);
            }
            else
            {
                if (raiz.hijos[validar_Hijo] != null)
                {
                    // Ir a la Izquierda
                    if (ID < raiz.values[identificador - 4].ID)
                    {
                        Insertar_Izquierda(ID, Name, price);
                    }
                    // Ir a la derecha
                    else
                    {
                        Insertar_derecha(ID, Name, price);
                    }
                    validar_Hijo = validar_Hijo + 2;
                }
                else
                {
                    foreach (var espacio in raiz.values)
                    {
                        if (espacio == null && num < valor)
                        {
                            raiz.values[num] = new Producto()
                            {
                                ID     = ID,
                                Nombre = Name,
                                Precio = price
                            };
                            Arbollista.Add(raiz);
                            break;
                        }
                        num++;
                        if (num == valor) /// full
                        {
                            // crear un auxiliar
                            Producto[] Auxiliar_ = Auxiliar(ID, Name, price, 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, string Name, string price)
        {
            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 Producto()
                    {
                        ID     = ID,
                        Nombre = Name,
                        Precio = price
                    };
                    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, raiz.values[contador - 1].Nombre, raiz.values[contador - 1].Precio);
                                //borrar la ultima posicion de la raiz
                                Array.Clear(raiz.values, contador - 1, contador - 1);
                                //colocar nueva raiz
                                raiz.values[contador - 1] = new Producto()
                                {
                                    ID = ID, Nombre = Name, Precio = price
                                };
                                break;
                            }
                        }
                    }
                    else
                    {
                        Nodo_P der = new Nodo_P(grado, entrar);
                        der.ID    = identificador;
                        der.padre = raiz.ID;
                        raiz.hijos[identificador - 2] = der;
                        identificador++;
                        //Crear un auxiliar
                        Producto[] Aux_ = Auxiliar(ID, Name, price, 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];
                    }
                    // Aumentar el valor +2
                }
            }
        }