public void Mostrar(NodoHistorial entrada)
        {
            int i;

            if (entrada == null)
            {
                return;
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("[");
                for (i = 0; i < entrada.GetClavesUsadas() - 1; i++)
                {
                    System.Diagnostics.Debug.WriteLine(entrada.Datos[i].GetCoordenadaX() + "," + entrada.Datos[i].GetCoordenadaY() + "," + entrada.Datos[i].GetNumerodeataque());
                }
                System.Diagnostics.Debug.WriteLine("]");
                if (entrada.GetPadre() != null)
                {
                    //System.Diagnostics.Debug.WriteLine("[" + entrada.GetPadre().Datos[i].GetCoordenadaX() + "," + entrada.GetPadre().Datos[i].GetCoordenadaY() + "," + entrada.GetPadre().Datos[i].GetNumerodeataque() + "padre de: " + entrada.Datos[i].GetCoordenadaX() + "," + entrada.Datos[i].GetCoordenadaY() + "," + entrada.Datos[i].GetNumerodeataque());
                }
                for (i = 0; i <= entrada.GetClavesUsadas(); i++)
                {
                    Mostrar(entrada.Ramas[i]);
                }
            }
        }
 public NodoHistorial(int indice)
 {
     Ramas             = new NodoHistorial[indice + 2];
     Datos             = new DatosNodoHistoria[indice + 1];
     this.clavesusadas = 0;
     this.Padre        = null;
 }
 public ArbolHistorial(int indice)
 {
     listadatos         = new DatosNodoHistoria[indice + 1];
     listaramas         = new NodoHistorial[indice + 2];
     nodoentrada        = null;
     index              = indice;
     numerodetirosfinal = 0;
 }
        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 SetPadre(NodoHistorial aux)
 {
     this.Padre = aux;
 }
 public void SetRamaat(int index, NodoHistorial aux)
 {
     this.Ramas[index] = aux;
 }