Я пробовал здесь много разных вещей и не могу заставить его работать. Ввод был "abbcccddddeeeee", который дает связанный список a, b, c, d, e с частотами 1, 2, 3, 4, 5 соответственно.
По какой-то причине мне кажется, что это дерево дает мне следующее дерево, основанное на множестве различных тестов, которые я запускал:
f15
/ \
f6 f9
/ \
d4 e5
/ \
f3 c3
/ \
a1 b2
public static HTree createHuffmanTree(HLinkedList list)
{
while (list.size() != 1)
{
list = getSortedLinkedList(list);
HTreeNode p = list.head;
HTreeNode q = p.next;
HTreeNode r = new HTreeNode('f');
r.left = p;
r.right = q;
r.frequency = (p.frequency + q.frequency);
list.insertIntoPosition(r, 2);
list.remove(0);
list.remove(0);
list = getSortedLinkedList(list);
}
return new HTree(list.head);
}
Было бы совершенно удивительно, если бы кто-то мог мне помочь, я невероятно, невероятно расстроен.
Спасибо!