public string LRK(Huffman_Node koren)
{
string code = "";
if (koren != null)
{
code += LRK(koren.Left);
code += LRK(koren.Right);
code += koren.Code;
}
return code;
}
Обход дерева Хаффмана C#
Я метод написал, но он неправильно работает (язык C#):
Код:
И вызов:
Код:
int i = 0;
Huffman_Node pointer = L1.First;// Это список из символов, и частотой вхождения символа в строке
while (pointer != null && i < dataGridView1.RowCount)
{
dataGridView1.Rows.Cells[0].Value = pointer.Symbol;
dataGridView1.Rows.Cells[1].Value = pointer.Weight;
dataGridView1.Rows.Cells[2].Value = Tree.LRK(Tree.Root);
pointer = pointer.Link;
i++;
}
Huffman_Node pointer = L1.First;// Это список из символов, и частотой вхождения символа в строке
while (pointer != null && i < dataGridView1.RowCount)
{
dataGridView1.Rows.Cells[0].Value = pointer.Symbol;
dataGridView1.Rows.Cells[1].Value = pointer.Weight;
dataGridView1.Rows.Cells[2].Value = Tree.LRK(Tree.Root);
pointer = pointer.Link;
i++;
}
А вы отладчиком пользовались, чтобы посмотреть, где программа не так работает?
Код:
public string RLK(Huffman_Node koren)
{
string code = "";
if (koren != null)
{
if (koren.Right != null)
code += RLK(koren.Right) + " ";
if (koren.Left != null)
code += RLK(koren.Left) + " ";
if (koren.Left != null && koren.Right != null)
return code;
code += koren.Code;
}
return code;
}
{
string code = "";
if (koren != null)
{
if (koren.Right != null)
code += RLK(koren.Right) + " ";
if (koren.Left != null)
code += RLK(koren.Left) + " ";
if (koren.Left != null && koren.Right != null)
return code;
code += koren.Code;
}
return code;
}
Этот метод обходит все узлы, и возвращает полную трассу обхода всего дерева, а мне нужно, чтоб когда указатель доходил до листа, метод возвращал значение поля этого узла. (Дерево Хаффмана).
Цитата:
Я отладить не могу метод
Когда он сохраняет в code значения промежуточных узлов, момент этот не смогли обнаружить? Странно, но да ладно.
Но в новой модификации вы на верном пути:)
Попробуйте этот вариант:
Код:
public string LRK(Huffman_Node koren)
{
string code = "";
if (koren != null)
{
if ( koren.Left == null && koren.Right == null )
{
code = koren.Code;
}
else
{
code += LRK(koren.Left);
code += LRK(koren.Right);
}
}
return code;
}
{
string code = "";
if (koren != null)
{
if ( koren.Left == null && koren.Right == null )
{
code = koren.Code;
}
else
{
code += LRK(koren.Left);
code += LRK(koren.Right);
}
}
return code;
}