public HojaB(int k) { this.k = k; Nodos = new NodoB[k]; for (int i = 0; i < k; i++) { Nodos[i] = null; } Padre = null; }
public void Insertar(NodoB nuevo) { int i = 0, j = 0; NodoB[] aux = new NodoB[k]; while (i < k) { if (Nodos[j] != null) { if (j < i) { aux[i] = Nodos[j]; j++; } else if (String.Compare(nuevo.Id, Nodos[j].Id) < 0) { aux[i] = nuevo; } else { aux[i] = Nodos[j]; j++; } } else if (i == j) { aux[i] = nuevo; } else { aux[i] = null; } i++; } Nodos = aux; }
public void Insertar(int x, int y, String unidadAtacante, int resultado, String unidadDañada, String emisor, String receptor, String fecha, String tiempoRestante, int numero) { String id = ""; switch (tipo) { case 1: //COORDENADA X id = x.ToString() + numero.ToString(); break; case 2: //COORDENADA Y id = y.ToString() + numero.ToString(); break; case 3: //UNIDAD ATACANTE id = unidadAtacante + numero.ToString(); break; case 4: //RESULTADO id = resultado.ToString() + numero.ToString(); break; case 5: //UNIDAD DAÑADA id = unidadDañada + numero.ToString(); break; case 6: //EMISOR id = emisor + numero.ToString(); break; case 7: //RECEPTOR id = receptor + numero.ToString(); break; case 8: //FECHA id = fecha + numero.ToString(); break; case 9: //TIEMPO id = tiempoRestante + numero.ToString(); break; case 10: //NUMERO DE ATAQUE id = numero.ToString(); break; }//fin del swtich CantidadAtaques++; NodoB nuevo = new NodoB(id, x, y, unidadAtacante, resultado, unidadDañada, emisor, receptor, fecha, tiempoRestante, CantidadAtaques); if (Raiz == null) { Raiz = new HojaB(K); Raiz.Insertar(nuevo); } else //la Raiz no es nula { HojaB aux = encontrarHoja(Raiz, id); aux.Insertar(nuevo); romperHoja(aux); } }
private void romperHoja(HojaB aux) { if (aux.Nodos[k - 1] != null) { int m = k / 2; HojaB izq = new HojaB(k); HojaB der = new HojaB(k); int j = 0; for (int i = 0; i < m; i++) { izq.Nodos[i] = aux.Nodos[j]; if (aux.Nodos[i].Derecha != null) { izq.Nodos[i].Derecha.Padre = izq; izq.Nodos[i].Izquierda.Padre = izq; } j++; } NodoB nuevo = aux.Nodos[j]; j++; for (int i = 0; i < m; i++) { der.Nodos[i] = aux.Nodos[j]; if (aux.Nodos[i].Derecha != null) { der.Nodos[i].Derecha.Padre = der; der.Nodos[i].Izquierda.Padre = der; } j++; } nuevo.Izquierda = izq; nuevo.Derecha = der; if (aux == Raiz) { Raiz = new HojaB(k); Raiz.Nodos[0] = nuevo; izq.Padre = Raiz; der.Padre = Raiz; } else { izq.Padre = aux.Padre; der.Padre = aux.Padre; j = 0; int i = 0; NodoB[] n = new NodoB[k]; while (i < k) { if (aux.Padre.Nodos[j] != null) { if (j < i) { n[i] = aux.Padre.Nodos[j]; j++; } else if (String.Compare(nuevo.Id, aux.Padre.Nodos[j].Id) < 0) { n[i] = nuevo; aux.Padre.Nodos[j].Izquierda = nuevo.Derecha; if (i > 0) { n[i - 1].Derecha = nuevo.Izquierda; } } else { n[i] = aux.Padre.Nodos[j]; j++; } } else if (i == j) { n[i] = nuevo; n[i - 1].Derecha = nuevo.Izquierda; } else { n[i] = null; } i++; } aux.Padre.Nodos = n; romperHoja(aux.Padre); } } }