树-哈夫曼树(Huffman Tree)

概述

哈夫曼树:树的带权路径长度达到最小。

构造规则

1. 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
3. 从森林中删除选取的两棵树,并将新树加入森林;
4. 重复(02)、(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。

基本操作

定义

1 权值

2 左孩子

3 右孩子

4 父节点

构造哈夫曼树(使用最小堆)

1 构造最小堆;

2 进入for循环:

(01) 首先,将最小堆中的最小节点拷贝一份并赋值给left,然后重塑最小堆(将最小节点和后面的节点交换位置,接着将"交换位置后的最小节点"之前的全部元素重新构造成最小堆);

(02) 接着,再将最小堆中的最小节点拷贝一份并将其赋值right,然后再次重塑最小堆;

(03) 然后,新建节点parent,并将它作为left和right的父节点;

(04) 接着,将parent的数据复制给最小堆中的指定节点。

原文地址:https://www.cnblogs.com/lucas-hsueh/p/3736772.html