Java创建一个霍夫曼树

时间:2014-12-17 17:45:59

标签: java binary-search-tree huffman-code

我目前正在使用优先级队列创建一个霍夫曼树。 我理解霍夫曼树如何工作的概念,但是在实现它时我发现很难生成代码。

目前我有这个:

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()返回一个包含Node数据的对象,在我的测试用例中它是诸如“A”或“G”等字母。所以我用.toString()将它转换为字符串然后创建一个新的BSTNode。

任何人都可以解释为什么我的BST没有形成它应该的方式吗?

1 个答案:

答案 0 :(得分:0)

我无法肯定地说(并且我没有足够的代表可悲地评论)而没有看到你正在使用的代码,但我有一个理论:

您使用自己的PriorityQueue吗?如果是这样,我想您可能忘记返回节点的内容,而是返回一个节点 - 这可以解释为什么PQ.getNextItem().toString()返回&#34; ads2.PQNode@1cfe4b2" ;,因为它意味着您回复ads2.PQNode对象,我认为这不是您的预期行为。