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