数据结构树-->霍夫曼树

目录

1. 数据结构树–>树基础
2. 数据结构树–>二叉树
3. 数据结构树–>二叉查找树\二叉排序树
4. 数据结构树–>平衡二叉树
5. 数据结构树–>霍夫曼树
6. 数据结构树–>红黑树
7. 数据结构树–>二叉堆
8. 数据结构树–>B树
9. 数据结构树–>B+树

霍夫曼树

1. 霍夫曼树的定义

霍夫曼树又称最优二叉树。了解霍夫曼树之前先了解几个名词,

  1. 节点的权:若将树中的节点赋给一个有某种含义的值,这个值称为节点的权。
  2. 路径:从一个节点到另一个节点之间的分支构成两个节点之间的路径。
  3. 路径的长度:路径上的分支数量。
  4. 树的路径长度:从树的根到树中每一个节点的路径长度之和。
  5. 节点的带权路径长度:从该节点到树根之间的路径长度与节点上权的乘积。
  6. 树的带权路径长度:树中所有叶子节点的带权路径长度之和。

数据结构树-->霍夫曼树_第1张图片

上图是个霍夫曼树,其中。

  1. 节点的权: A:7 B:5 C:2 D:4.
  2. 路径: 数字4旁边的线就是路径。
  3. 树的路径长度: 1 + 1 + 2 + 2 + 3 + 3
  4. 节点带权的路径长度: B节点为 : 5 x 2 = 10
  5. 树的带权路径长度: 7 + 5x2 + 2x3 + 4x3

**霍夫曼树定义:**给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为夫曼树(Huffman Tree)。

2. 构造霍夫曼树

根据霍夫曼树的特性我们可以知道,权值越大的叶子节点越靠近根节点。

这里构造霍夫曼树的方法称之为霍夫曼算法。

算法:

输入:权值为(w1,w2,…wn)的n个节点

输出:对应的霍夫曼树

过程:

  1. 将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点.
  2. 在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和.
  3. 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林.
  4. 重复 步骤2 和 3 直到森林里只有一棵树为止

数据结构树-->霍夫曼树_第2张图片

3. 霍夫曼树的使用

霍夫曼树应用于通讯及数据传送中对信息的二进制编码。

你可能感兴趣的:(数据结构,数据结构,霍夫曼树)