C# 哈夫曼树不工作的算法

C# 哈夫曼树不工作的算法,c#,huffman-code,C#,Huffman Code,我想做一个哈夫曼树拉链。我开始创建以类节点为类型的列表,输入字符串中的字符应该添加到列表中吗?但是为什么我不能打印列表(字符串中的字符和字符频率) private void btnKomprimer\u单击(对象发送方,System.Windows.RoutedEventArgs e) { int k=0; 字符串输入; 卡拉克特; input=txtInput.Text; input=input.ToLower(); txtOutput.Text=“”; 列表节点=新列表(); for(int

我想做一个哈夫曼树拉链。我开始创建以类节点为类型的列表,输入字符串中的字符应该添加到列表中吗?但是为什么我不能打印列表(字符串中的字符和字符频率)

private void btnKomprimer\u单击(对象发送方,System.Windows.RoutedEventArgs e)
{
int k=0;
字符串输入;
卡拉克特;
input=txtInput.Text;
input=input.ToLower();
txtOutput.Text=“”;
列表节点=新列表();
for(int i=0;i
你把算法搞糟了。当字符不在列表中时,必须将其添加到节点器列表中。项目数(
noder.Count
)将始终为0,因为您只在从0到noder.Count迭代的for循环中添加了一个
节点

for (int j = 0; j < noder.Count; j++) // noder.Count is always 0
for(int j=0;j
请尝试以下方法:

List<Node> noder = new List<Node>();
for (int i = 0; i < input.Length;i++)
{   
    karakter = input[i];

    bool found = false;
    for (int j = 0; j < noder.Count;j++)
    {
        if (noder[j].ErTegn(karakter) == false)
        {
            noder[j].ØkMed1();
            found = true;
            break;
        }
    }
    if(!found)
    {
        noder.Add(new Node(karakter));
    }
}
foreach(Node n in noder)
{
    txtOutput.Text += n.Resultat();
}
List noder=newlist();
for(int i=0;i
我建议使用
词典而不是列表。您可以根据字符在输入文本中的出现次数来存储该字符。例如:

Dictionary<char, int> occurrences = new Dictionary<char, int>();

foreach (char c in input)
{
    if (occurrences.ContainsKey(c))
    {
        occurrences[c]++;
    }
    else
    {
        occurrences[c] = 1;
    }
}
这将按字符键对字典进行排序


我希望这对你的研究有所帮助,祝你好运:)

你所说的打印列表是什么意思?
?也许值得尝试调试一下。当我尝试它时,没有任何项目被添加到列表中,因为noder.Count从0开始,所以(j)的内部永远不会被输入。很抱歉,我认为python打印:P不会打印,但会使txtOutput.Text=(列表节点中的字符和频率)这可能是问题DoctorMick,我从来没有确定数据被添加到列表中。您看到合适的解决方案了吗?您不能在迭代列表时将元素添加到列表中。是否尝试将输入中的字符添加到节点?那你就不需要内环了谢谢!我试过foreach(noder中的n),但没有成功。我没有用过foreachmuch@SindreWilting嗯,我的回答解决了你的问题还是部分问题?嗯,不是真的。这使它看起来更漂亮,但似乎列表中仍然没有添加项目
Dictionary<char, int> occurrences = new Dictionary<char, int>();

foreach (char c in input)
{
    if (occurrences.ContainsKey(c))
    {
        occurrences[c]++;
    }
    else
    {
        occurrences[c] = 1;
    }
}
txtOutput.Text = "";
foreach (KeyValuePair<char, int> pair in occurrences)
{
    txtOutput.Text += pair.Key + " : " + pair.Value + 
        Environment.NewLine;
}
foreach (KeyValuePair<char, int> pair in occurrences.OrderBy(pair => pair.Key))