В настоящее время я создаю дерево Хаффмана с использованием очереди приоритетов. Я понимаю концепцию того, как работает дерево Хаффмана, однако при его реализации мне было сложно создать код.Java Создание дерева Huffman
В настоящее время у меня есть это:
public void CreateHuffmanTree(String[] symbols, int[] frequencies)
{
PriorityQueue PQ = new PriorityQueue();
for (int i = 0; i < symbols.length; i++)
{
BSTNode temp = new BSTNode(symbols[i]);
PQ.AddItem(temp, frequencies[i]);
}
do
{
BSTNode hold = new BSTNode();
int intHold = (PQ.QueueArray[0].priority + PQ.QueueArray[1].priority);
hold.data = Integer.toString(intHold);
hold.leftChild = new BSTNode(PQ.GetNextItem().toString());
hold.rightChild = new BSTNode(PQ.GetNextItem().toString());
PQ.AddItem(hold, intHold);
} while (PQ.queueSize > 1);
System.out.println(PQ.GetQueueSize());
}
Однако, когда я проверить код, он производит это:
Мой PQ.GetNextItem() возвращает объект с данными для узла, в в моем случае для тестирования это буквы типа «A» или «G» и т. д. Поэтому я использовал .toString(), чтобы преобразовать его в строку, чтобы затем создать новый BSTNode.
Может ли кто-нибудь пролить свет на то, почему мой BST не формирует то, как он должен?
Вы используете пользовательскую реализацию PriorityQueue? PQ.AddItem (temp, frequency [i]) не является стандартной функцией в библиотеке. – aparna
Не думаю, что информации достаточно. Мы не можем видеть весь соответствующий код, и вы не совсем поняли, в чем проблема, кроме «это не так, как должно». См. Http://stackoverflow.com/help/mcve. – ajb
Правильно. У меня есть моя собственная реализация. Было бы полезно, если бы я опубликовал свою реализацию очереди приоритетов? – Craig