叶子在二叉树中消失

时间:2014-06-09 14:38:54

标签: c# encoding binary-tree huffman-code

我正在尝试使用自制的霍夫曼编码。如果没有轻微的缺陷,我已经进行了二元树生成。

当他们的深度超过一级时,我的叶子会消失。我的根节点将有子节点,但这些子节点的叶子为空。我认为这与没有被保留的参考文献有关,但我似乎无法在两天之后把它弄清楚。

    private HuffmanTree fillTree(PriorityQueue<HuffmanTree> _eQueue)
    {
        while (_eQueue.count > 1)
        {
            ///Dequeue children
            HuffmanTree node1 = _eQueue.Dequeue();
            HuffmanTree node2 = _eQueue.Dequeue();

            ///Create new parent
            HuffmanTree parent = new HuffmanTree();

            ///Set up relations
            parent.node_left = node1;
            parent.node_right = node2;
            node1.parent = parent;
            node2.parent = parent;

            ///Give parent the weight of it's children combined
            parent.weight = node1.weight + node2.weight;

            ///Reinsert parent into priority queue
            _eQueue.Enqueue(parent, parent.weight);
        }

        ///Return the last object in the queue
        return _eQueue.Dequeue();
    }

这是我用来生成霍夫曼树的代码。

    public HuffmanTree node_left { get; set; }
    public HuffmanTree node_right { get; set; }
    public HuffmanTree parent { get; set; }
    public int weight { get; set; }
    public char value { get; set; }

这些是类变量。

你们可以帮助我吗?

我也在github上完成了我的项目。如果你愿意,你可以带一只雄​​鹅。

https://github.com/samynv/HufmanEncoding

所有工作都在Dev分支中完成。代码在createTree函数中工作正常,但在compressString函数中不起作用。

1 个答案:

答案 0 :(得分:2)

我检查了你的代码,看起来它应该正常工作。我还运行了你在GitHub上的代码,你的程序正确地构建了树。在fillTree操作之后生成的根具有正确的子级,多个级别(而不是只有一个级别,如您所述)。

当我检查结果值及其权重,并使用此在线霍夫曼编码演示(http://courses.cs.washington.edu/courses/cse373/04sp/fullhuffmandemo.html)交叉引用它时,我得到完全相同的权重,当我用你的句子“j'aime运行你的程序时离开aller sur le bord de l'eau les jeudis ou les jours impairs“。

你确定你没有解释自己的错误吗?