2014-12-17 4 views
-1

В настоящее время я создаю дерево Хаффмана с использованием очереди приоритетов. Я понимаю концепцию того, как работает дерево Хаффмана, однако при его реализации мне было сложно создать код.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()); 
    } 

Однако, когда я проверить код, он производит это: enter image description here

Мой PQ.GetNextItem() возвращает объект с данными для узла, в в моем случае для тестирования это буквы типа «A» или «G» и т. д. Поэтому я использовал .toString(), чтобы преобразовать его в строку, чтобы затем создать новый BSTNode.

Может ли кто-нибудь пролить свет на то, почему мой BST не формирует то, как он должен?

+0

Вы используете пользовательскую реализацию PriorityQueue? PQ.AddItem (temp, frequency [i]) не является стандартной функцией в библиотеке. – aparna

+0

Не думаю, что информации достаточно. Мы не можем видеть весь соответствующий код, и вы не совсем поняли, в чем проблема, кроме «это не так, как должно». См. Http://stackoverflow.com/help/mcve. – ajb

+0

Правильно. У меня есть моя собственная реализация. Было бы полезно, если бы я опубликовал свою реализацию очереди приоритетов? – Craig

ответ

0

Я не могу точно сказать (и я не хватает респ комментировать, к сожалению), не видя код, который вы используете, но у меня есть теория:

Вы используете свой собственный PriorityQueue ? Если это так, я думаю, вы, возможно, забыли вернуть содержимое узла и скорее вернули узел - это объясняет, почему PQ.getNextItem().toString() возвращает «[email protected]», так как это означает, что вы возвращаете объект ads2.PQNode, который я не думаю, это ваше намеренное поведение.

Смежные вопросы