Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
给出奇异树的哈夫曼编码算法(Java)_Java_Algorithm_Encoding_Huffman Code - Fatal编程技术网

给出奇异树的哈夫曼编码算法(Java)

给出奇异树的哈夫曼编码算法(Java),java,algorithm,encoding,huffman-code,Java,Algorithm,Encoding,Huffman Code,我在这里尝试了很多不同的东西,但似乎都没能成功。输入是“abbccddddeeee”,它给出了一个链表a、b、c、d、e,频率分别为1、2、3、4、5 然而,出于某种原因,基于我运行的许多不同测试,它似乎给出了以下树: f15 / \ f6 f9 / \ d4 e5 / \ f

我在这里尝试了很多不同的东西,但似乎都没能成功。输入是“abbccddddeeee”,它给出了一个链表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);
} 
如果有人能帮我,我会非常非常非常沮丧


谢谢大家!

问题出在
getSortedLinkedList
中。看起来您正在交换频率值,而不是节点本身,因此指针不会随频率值一起移动

通常,在处理链表时,绘制每个阶段的图片非常有用:

 a1->b2->c3->d4->e5
第一步:

  f3->c3->d4->e5
  /\
a1  b2
排序:无变化

下一步:

    f6->d4->e5
    /\
  f3  c3
  /\
a1  b2
      f9->f6
      /\
    d4  e5
    /\
  f3  c3
  /\
a1  b2
排序是这样做的:

    d4->e5->f6 (forgot to move child nodes with frequency)
    /\
  f3  c3
  /\
a1  b2
下一步:

    f6->d4->e5
    /\
  f3  c3
  /\
a1  b2
      f9->f6
      /\
    d4  e5
    /\
  f3  c3
  /\
a1  b2
排序:

最后一步:

             f15
             /\
           f6  f9
           /\
         d4  e5
         /\
       f3  c3
       /\
     a1  b2