void InsertarEnLaLista()
        {
            var asignado = false;

            DiccionarioPrefijos = Arbol.OrderBy(x => x.Probabilidad).ToList();
            foreach (var item in Letras) //PARA CADA NODO DEL DICCIONARIO
            {
                var nuevo = new NodoHuffman();
                //Llenar Nodo
                nuevo.Nombre       = (byte)item.Key;
                nuevo.Probabilidad = item.Value;
                Arbol.Add(nuevo);
            }
            Arbol = Arbol.OrderBy(x => x.Probabilidad).ToList();
            if (asignado == false)
            {
                DiccionarioPrefijos = Arbol.OrderBy(x => x.Probabilidad).ToList();
                asignado            = true;
            }

            var n = 1;

            while (Arbol.Count != 1)
            {
                var NuevoPadre = new NodoHuffman();
                var nodo       = new NodoHuffman();
                //daba problemas por que el nodo papa estaba declarado afuera, entonces siempre era el mismo
                #region Asigncacion Padre
                NuevoPadre.Derecha         = Arbol.First();
                NuevoPadre.Izquierda       = Arbol.ElementAt(1);
                NuevoPadre.esHoja          = false;
                NuevoPadre.Izquierda.Padre = NuevoPadre;
                NuevoPadre.Derecha.Padre   = NuevoPadre;
                if (NuevoPadre.Izquierda != null)
                {
                    NuevoPadre.Izquierda.SoyIzquierda = true;
                    NuevoPadre.Izquierda.SoyDerecha   = false;
                }
                if (NuevoPadre.Derecha != null)
                {
                    NuevoPadre.Derecha.SoyDerecha   = true;
                    NuevoPadre.Derecha.SoyIzquierda = false;
                }
                NuevoPadre.Probabilidad = NuevoPadre.Derecha.Probabilidad + NuevoPadre.Izquierda.Probabilidad;


                #endregion
                Arbol.RemoveAt(0);
                Arbol.RemoveAt(0);
                Arbol.Add(NuevoPadre);
                n++;
                Arbol = Arbol.OrderBy(x => x.Probabilidad).ToList();
            }
            Prefijos(Arbol[0], "");
        }
 public NodoHuffman()
 {
     esHoja       = true;
     Prefijo      = "";
     Probabilidad = 0;
     Padre        = null;
     Izquierda    = null;
     Derecha      = null;
     SoyDerecha   = false;
     SoyIzquierda = false;
 }
 void Prefijos(NodoHuffman _Actual, string prefijo)
 {
     if (_Actual.Derecha == null && _Actual.Izquierda == null)
     {
         DicPrefijos.Add((char)_Actual.Nombre, prefijo);
         LetPrefijos.Add(((char)_Actual.Nombre).ToString(), prefijo);
     }
     else
     {
         if (_Actual.Derecha != null)
         {
             Prefijos(_Actual.Derecha, prefijo + 1);
         }
         if (_Actual.Izquierda != null)
         {
             Prefijos(_Actual.Izquierda, prefijo + 0);
         }
     }
 }