public bool InsertarHistorialUnidadAtacante(DatosNodoHistoria datos)
        {
            NodoHistorial nodo, padre;
            int           i;

            padre = nodo = this.nodoentrada;
            while (nodo != null)
            {
                padre = nodo;
                i     = 0;
                while (i < nodo.GetClavesUsadas() && nodo.Datos[i].GetUnidadatacante().CompareTo(datos.GetUnidadatacante()) < 0)
                {
                    i++;
                }
                if (nodo.Datos[i] != null && nodo.Datos[i].GetUnidadatacante() == datos.GetUnidadatacante() && i < nodo.GetClavesUsadas())
                {
                    InsertarHistorialNumerodetiro(datos);
                    return(true);
                }
                else
                {
                    nodo = nodo.Ramas[i];
                }
            }
            nodo = padre;
            InsertarHistorial(datos, nodo, null, null, "unidadatacante");
            numerodetirosfinal++;
            return(true);
        }
        public bool InsertarHistorialTiempo(DatosNodoHistoria datos)
        {
            NodoHistorial nodo, padre;
            int           i;

            padre = nodo = this.nodoentrada;
            while (nodo != null)
            {
                padre = nodo;
                i     = 0;
                while (i < nodo.GetClavesUsadas() && nodo.Datos[i].GetTiempo() < datos.GetTiempo())
                {
                    i++;
                }
                if (nodo.Datos[i] != null && nodo.Datos[i].GetTiempo() == datos.GetTiempo() && i < nodo.GetClavesUsadas())
                {
                    InsertarHistorialNumerodetiro(datos);
                    return(true);
                }
                else
                {
                    nodo = nodo.Ramas[i];
                }
            }
            nodo = padre;
            InsertarHistorial(datos, nodo, null, null, "tiempo");
            numerodetirosfinal++;
            return(true);
        }
        public void InsertarHistorialNumerodetiro(DatosNodoHistoria datos)
        {
            NodoHistorial nodo, padre;
            int           i;

            padre = nodo = this.nodoentrada;
            while (nodo != null)
            {
                padre = nodo;
                i     = 0;
                while (i < nodo.GetClavesUsadas() && (nodo.Datos[i].GetNumerodeataque() < datos.GetNumerodeataque()))
                {
                    i++;
                }
                nodo = nodo.Ramas[i];
            }
            nodo = padre;
            InsertarHistorial(datos, nodo, null, null, "numerodetiro");
            numerodetirosfinal++;
        }
        private void InsertarHistorial(DatosNodoHistoria datos, NodoHistorial nodo, NodoHistorial hijo1, NodoHistorial hijo2, string forma)
        {
            NodoHistorial padre, nuevo;
            int           i, j;
            bool          salir = false;

            do
            {
                if (nodo == null)
                {
                    nodo = new NodoHistorial(index);
                    nodo.SetClavesUsadas(0);
                    nodo.SetPadre(null);
                    nodoentrada = nodo;
                }
                padre = nodo.GetPadre();
                if (nodo.GetClavesUsadas() == index)
                {
                    nuevo = new NodoHistorial(index);
                    i     = 0;
                    if (forma == "coordenadax")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetCoordenadaX().CompareTo(datos.GetCoordenadaX()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "coordenaday")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetCoordenadaY().CompareTo(datos.GetCoordenadaY()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "unidadatacante")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetUnidadatacante().CompareTo(datos.GetUnidadatacante()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "resultado")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetResultado().CompareTo(datos.GetResultado()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "tipodeunidad")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetTipoUnidadesDan().CompareTo(datos.GetTipoUnidadesDan()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "emisor")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetEmisor().CompareTo(datos.GetEmisor()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "receptor")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetReceptor().CompareTo(datos.GetReceptor()) < 0 && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "fecha")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetFecha() < datos.GetFecha() && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "tiempo")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetTiempo() < datos.GetTiempo() && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    else if (forma == "numerodetiro")
                    {
                        while (nodo.Datos[i] != null && nodo.Datos[i].GetNumerodeataque() < datos.GetNumerodeataque() && i < index)
                        {
                            listadatos[i] = nodo.Datos[i];
                            listaramas[i] = nodo.Ramas[i];
                            i++;
                        }
                    }
                    listadatos[i]     = datos;
                    listaramas[i]     = hijo1;
                    listaramas[i + 1] = hijo2;
                    while (i < index)
                    {
                        listadatos[i + 1] = nodo.Datos[i];
                        listaramas[i + 2] = nodo.Ramas[i];
                        i++;
                    }

                    nodo.SetClavesUsadas(index / 2);
                    for (j = 0; j < index / 2; j++)
                    {
                        nodo.Datos[j] = listadatos[j];
                        nodo.Ramas[j] = listaramas[j];
                    }
                    for (j = index / 2; j < index; j++)
                    {
                        nodo.Datos[j] = null;
                        nodo.Ramas[j] = null;
                    }
                    nodo.Ramas[j] = null;
                    nodo.Ramas[nodo.GetClavesUsadas()] = listaramas[nodo.GetClavesUsadas()];
                    nuevo.SetClavesUsadas(index - nodo.GetClavesUsadas());
                    for (j = 0; j < nuevo.GetClavesUsadas(); j++)
                    {
                        nuevo.Datos[j] = listadatos[j + (index / 2) + 1];
                        nuevo.Ramas[j] = listaramas[j + (index / 2) + 1];
                    }
                    nuevo.Ramas[nuevo.GetClavesUsadas()] = listaramas[index + 1];
                    for (j = 0; j <= nodo.GetClavesUsadas(); j++)
                    {
                        if (nodo.Ramas[j] != null)
                        {
                            nodo.Ramas[j].SetPadre(nodo);
                        }
                    }
                    for (j = 0; j <= nodo.GetClavesUsadas(); j++)
                    {
                        if (nuevo.Ramas[j] != null)
                        {
                            nuevo.Ramas[j].SetPadre(nuevo);
                        }
                    }
                    datos = listadatos[index / 2];
                    hijo1 = nodo;
                    hijo2 = nuevo;
                    nodo  = padre;
                }
                else
                {
                    i = 0;
                    if (nodo.GetClavesUsadas() > 0)
                    {
                        if (forma == "coordenadax")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetCoordenadaX().CompareTo(datos.GetCoordenadaX()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "coordenaday")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetCoordenadaY().CompareTo(datos.GetCoordenadaY()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "unidadatacante")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetUnidadatacante().CompareTo(datos.GetUnidadatacante()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "resultado")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetResultado().CompareTo(datos.GetResultado()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "tipodeunidad")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetTipoUnidadesDan().CompareTo(datos.GetTipoUnidadesDan()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "emisor")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetEmisor().CompareTo(datos.GetEmisor()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "receptor")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetReceptor().CompareTo(datos.GetReceptor()) < 0 && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "fecha")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetFecha() < datos.GetFecha() && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "tiempo")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetTiempo() < datos.GetTiempo() && i < index)
                            {
                                i++;
                            }
                        }
                        else if (forma == "numerodetiro")
                        {
                            while (nodo.Datos[i] != null && nodo.Datos[i].GetNumerodeataque() < datos.GetNumerodeataque() && i < index)
                            {
                                i++;
                            }
                        }
                        for (j = nodo.GetClavesUsadas(); j > i; j--)
                        {
                            nodo.Datos[j] = nodo.Datos[j - 1];
                        }
                        for (j = nodo.GetClavesUsadas() + 1; j > i; j--)
                        {
                            nodo.Ramas[j] = nodo.Ramas[j - 1];
                        }
                    }
                    int a = nodo.GetClavesUsadas();
                    nodo.clavesusadas++;
                    nodo.Datos[i]     = datos;
                    nodo.Ramas[i]     = hijo1;
                    nodo.Ramas[i + 1] = hijo2;
                    if (hijo1 != null)
                    {
                        hijo1.SetPadre(nodo);
                    }
                    if (hijo2 != null)
                    {
                        hijo2.SetPadre(nodo);
                    }
                    salir = true;
                }
            } while (!salir);
        }
 public void SetDatosat(int index, DatosNodoHistoria aux)
 {
     this.Datos[index] = aux;
 }