哈夫曼樹的c 實現

2021-07-12 00:19:20 字數 2065 閱讀 1684

huffman 樹稱為最優二叉樹,用其來對字元編碼是一種比較好的選擇,huffman樹的實現也比較簡單,構造huffman樹的思想就是每次從序列中取出權值最小的兩個,然後構造出乙個樹,然再去構造,一直到只有乙個根節點為止。根據這個「每次從中選出最小的兩個值」,我們應該想到優先佇列,優先佇列可以迅速的從一堆數中找出極小值或者極大值,用優先佇列的這個性質可以很簡單的構造huffman樹。

當然,構造huffman樹只是第一步,構造完成之和,我們需要開始編碼,其實就是遍歷一遍整棵huffman樹,然後給每個葉子節點乙個編碼,可以用「往左走填0,往右走填1」的方法來編碼。

解碼就是遍歷,到葉子節點也就可以取到這個編碼所對應的值了。

下面是我很久以前寫的乙個實現,可以輸入一篇文章,該程式會首先對每個出現的單詞計數(頻率),然後構造huffman編碼等,同時你還可以輸入編碼以解碼。

/*

編號:004_13

名字:_huffman_tree

描述:huffman樹與應用類

備註:本類僅對小寫英文本元實現,對於不同需求,請自行修改**

*/class _huffman_tree

; vector<_character_code> _huffman_code;

_huffman_tree()

_huffman_tree(char _value, int _weight, _huffman_tree* left_child, _huffman_tree* right_child)

//judge if this node is leaf node

bool leaf()

//you need to offer a file that stored the txt

//count num

void _count_character_nums(string filename)

_character_num[(size_t)(_line[i] - 'a')]++;

}} _open.close();

} //function pointer

class _small_big

};//build huffman tree

//return the root pointer of this huffman tree

_huffman_tree* _create_huffman_tree()

}//create this huffman tree

while (_my_queue.size()>1)

return _my_queue.top();

} //encode huffman code

//return void

void _encode_huffman(_huffman_tree* _root_pointer,string _huffman_code)

string _left_code = _huffman_code;

string _right_code = _huffman_code;

_left_code += '1';

_right_code += '0';

_encode_huffman(_root_pointer->_left_child_pointer, _left_code);

_encode_huffman(_root_pointer->_right_child_pointer, _right_code);

} //decode,so you need to offer a filename

//this file need including some huffman code

//the fuction will decode these huffman code

void _decode_huffman(_huffman_tree* _root_pointer,string filename)

if (_read_one_line[i] == '1')

if (_read_one_line[i] == '0')

}} _read_file_stream.close();

}};

哈夫曼樹與哈夫曼編碼(C 實現)

1 對給定的n個權值構成n棵二叉樹的初始集合f 其中每棵二叉樹ti中只有乙個權值為wi的根結點,它的左右子樹均為空。2 在f中選取兩棵根結點權值最小的樹作為新構造的二叉樹的左右子樹,新二叉樹的根結點的權值為其左右子樹的根結點的權值之和。3 從f中刪除這兩棵樹,並把這棵新的二叉樹同樣以公升序排列加入到...

哈夫曼樹 C 實現

include using namespace std define maxbit 10 define maxvalue 10000 define maxleaf 100 define maxnode maxleaf 2 1 定義哈夫曼樹編碼型別 typedef structcodetype 定義哈...

哈夫曼樹C 實現

哈夫曼樹的介紹 huffman tree,中文名是哈夫曼樹或霍夫曼樹,它是最優二叉樹。定義 給定n個權值作為n個葉子結點,構造一棵二叉樹,若樹的帶權路徑長度達到最小,則這棵樹被稱為哈夫曼樹。這個定義裡面涉及到了幾個陌生的概念,下面就是一顆哈夫曼樹,我們來看 答。01 路徑和路徑長度 定義 在一棵樹中...