簡體   English   中英

需要幫助編碼霍夫曼樹

[英]Need help encoding a huffman tree

我一直在嘗試編碼霍夫曼樹,但是我不知道為什么我得到的二進制密鑰都是錯誤的。 該樹正確完成,因此我的Binary Keys方法必須成為問題。

這是我用於編碼的代碼:

void Tree::CreateBinary(Node *r)
{
    if(r==nullptr)
    {
        cout << "empty Tree" << endl;
    }
    else
    {
        if (r->character != NULL)
        {
            Binary(root, "", r->character);
        }

        CreateBinary(r->LeftSon);
        CreateBinary(r->RightSon);
    }

}

void Tree::Binary(Node *r, string key, char character)
{   

    if (r->LeftSon == NULL && r->RightSon == NULL && r->character == character)
    {
        r->key = key;
        cout << r->character << ": " << r->key << endl;
    }

    if (r->LeftSon != NULL)
    {
        if(r->LeftSon->character!=NULL && r->LeftSon->character!=character)
        {
            Binary(r->LeftSon, key, character);
        }else
        {
            key = key + "0";
            Binario(r->LeftSon, key, character);
        }

    }
    if (r->RightSon != NULL)
    {
        key = key + "1";
        Binary(r->RightSon, key, character);
    }

}

我一直以這棵樹為例: 霍夫曼樹

當我嘗試對其進行編碼時,我得到了以下密鑰:

I: 00

P: 01

E: 010

A: 0110

T: 01110

SPACE: 011110

S: 011111

在這里查看您要key

if (r->LeftSon != NULL)
{
    if(r->LeftSon->character!=NULL && r->LeftSon->character!=character)
    {
        Binary(r->LeftSon, key, character);
    }else
    {
        key = key + "0";
        Binario(r->LeftSon, key, character);
    }

}
if (r->RightSon != NULL)
{
    key = key + "1";
    Binary(r->RightSon, key, character);
}

在樹的頂部,有一個左兒子,其字符為空,因此您將'0'附加到key ,然后使用該鍵探索右邊的子樹。

一個簡單的解決方法:

Binario(r->LeftSon, key+"0", character);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM