c++ 哈夫曼树算法流程图像化

我胡汉三又肥来了。。
刚刚学习了哈夫曼树算法而且画了一张图方便理解。。迫不及待的贴出来嘚瑟 hh~
哈夫曼算法基本思想:

(1) 以权值分别为W1,W2...Wn的n各结点,构成n棵二叉树T1,T2,...Tn并组成森林F={T1,T2,...Tn},其中每棵二叉树 Ti仅有一个权值为 Wi的根结点;

(2) 在F中选取两棵根结点权值最小的树作为左右子树构造一棵新二叉树,并且置新二叉树根结点权值为左右子树上根结点的权值之和(根结点的权值=左右孩子权值之和,叶结点的权值= Wi);

(3) 从F中删除这两棵二叉树,同时将新二叉树加入到F中;

(4) 重复(2)、(3)直到F中只含一棵二叉树为止,这棵二叉树就是Huffman树。
  c++ 哈夫曼树算法流程图像化_第1张图片
 哈夫曼算法的存储结构

考虑到对于有n个叶子结点的哈夫曼树有2n-1个结点,并且进行n-1次合并操作,为了便于选取根节点权值最小的二叉树以及合并操作,设置一个数组haftree[2n-1],保存哈夫曼树中的各个结点的信息,数组元素的结点结构如下图所示:
c++ 哈夫曼树算法流程图像化_第2张图片
weight保存结点权值;

lchild保存该节点的左孩子在数组中的下标;

rchild保存该节点的右孩子在数组中的下标;

parent保存该节点的双亲孩子在数组中的下标。

struct element
{
int weight; // 权值域
int lchild, rchild, parent; // 该结点的左、右、双亲结点在数组中的下标
};
哈夫曼算法C++实现
https://www.cnblogs.com/smile233/p/8184492.html

你可能感兴趣的:(c++,c++)