目录
1. 数据结构树–>树基础
2. 数据结构树–>二叉树
3. 数据结构树–>二叉查找树\二叉排序树
4. 数据结构树–>平衡二叉树
5. 数据结构树–>霍夫曼树
6. 数据结构树–>红黑树
7. 数据结构树–>二叉堆
8. 数据结构树–>B树
9. 数据结构树–>B+树
霍夫曼树
1. 霍夫曼树的定义
霍夫曼树又称最优二叉树。了解霍夫曼树之前先了解几个名词,
- 节点的权:若将树中的节点赋给一个有某种含义的值,这个值称为节点的权。
- 路径:从一个节点到另一个节点之间的分支构成两个节点之间的路径。
- 路径的长度:路径上的分支数量。
- 树的路径长度:从树的根到树中每一个节点的路径长度之和。
- 节点的带权路径长度:从该节点到树根之间的路径长度与节点上权的乘积。
- 树的带权路径长度:树中所有叶子节点的带权路径长度之和。
上图是个霍夫曼树,其中。
- 节点的权: A:7 B:5 C:2 D:4.
- 路径: 数字4旁边的线就是路径。
- 树的路径长度: 1 + 1 + 2 + 2 + 3 + 3
- 节点带权的路径长度: B节点为 : 5 x 2 = 10
- 树的带权路径长度: 7 + 5x2 + 2x3 + 4x3
**霍夫曼树定义:**给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为夫曼树(Huffman Tree)。
2. 构造霍夫曼树
根据霍夫曼树的特性我们可以知道,权值越大的叶子节点越靠近根节点。
这里构造霍夫曼树的方法称之为霍夫曼算法。
算法:
输入:权值为(w1,w2,…wn)的n个节点
输出:对应的霍夫曼树
过程:
- 将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点.
- 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和.
- 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林.
- 重复 步骤2 和 3 直到森林里只有一棵树为止
3. 霍夫曼树的使用
霍夫曼树应用于通讯及数据传送中对信息的二进制编码。