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 } } }