一、哈夫曼树的概念
哈夫曼树又叫最优二叉树,显然哈夫曼树是建立在二叉树的基础上。
我们先来了解几个基础概念:
树根到树的每一个结点的路径长度之和为树的路径长度。
在结点数目相同的二叉树中,完全二叉树的路径长度最短。
在一些应用中,给树中结点赋予某种意义的数值,此数值称为结点的权。
结点到树根之间的路径长度与该节点权的乘积称为结点的带权路径长度。
树中所有叶子结点的带权路径长度之和为树的带权路径长度。
结点数量相同且每个节点的权值相同的n个叶子结点构成的所有二叉树中,树的带权路径长度最小的二叉树称为哈夫曼树。
例如下图,c就是哈夫曼树:
二、哈夫曼树的C++声明
template <typename ElemType> class HuffmanTree:public SeqTree<ElemType> { public: void display(); void displayList(); void dispalyTree(); void createHuffmanInsideNode(); void createHuffmanSeqTree(); void huffmanCoding(); int HuffmanSqListStatus(); void inputHuffmanLeafList(); bool isHuffmanSqTreeEmpty(); private: MyHuffmanTreeSqList huffSqList; MySeqTree<EleType> huffSqTree; };