public void Build(string source)
{
// 빈도수 계산하여 Frequencies에 저장
for (int i = 0; i < source.Length; i++)
{
if (!Frequencies.ContainsKey(source[i]))
Frequencies.Add(source[i], 0);
Frequencies[source[i]]++;
}
// Test Dictionary<char, int> Frequencies
foreach(var v in Frequencies)
{
System.Console.WriteLine(v.Key + "\t" + v.Value);
}
// List<Node> nodes를 만든다
foreach (KeyValuePair<char, int> s in Frequencies)
nodes.Add(new Node()
{
Symbol = s.Key,
Frequency = s.Value
});
while(nodes.Count > 1)
{
List<Node> orderedNodes
= nodes.OrderBy(Node => Node.Frequency).ToList<Node>();
if(orderedNodes.Count >= 2)
{
List<Node> taken = orderedNodes.Take(2).ToList<Node>();
Node parent = new Node()
{
Symbol = '*',
Frequency = taken[0].Frequency + taken[1].Frequency,
Left = taken[0],
Right = taken[1]
};
nodes.Remove(taken[0]);
nodes.Remove(taken[1]);
nodes.Add(parent);
this.Root = nodes.FirstOrDefault();
}
}
}