树-哈夫曼树(Huffman Tree)
2014-05-19 14:30
232 查看
概述
哈夫曼树:树的带权路径长度达到最小。构造规则
1. 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点);
2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
3. 从森林中删除选取的两棵树,并将新树加入森林;
4. 重复(02)、(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
2. 在森林中选出根结点的权值最小的两棵树进行合并,作为一棵新树的左、右子树,且新树的根结点权值为其左、右子树根结点权值之和;
3. 从森林中删除选取的两棵树,并将新树加入森林;
4. 重复(02)、(03)步,直到森林中只剩一棵树为止,该树即为所求得的哈夫曼树。
基本操作
定义
1 权值
2 左孩子
3 右孩子
4 父节点
2 左孩子
3 右孩子
4 父节点
构造哈夫曼树(使用最小堆)
1 构造最小堆;
2 进入for循环:
(01) 首先,将最小堆中的最小节点拷贝一份并赋值给left,然后重塑最小堆(将最小节点和后面的节点交换位置,接着将"交换位置后的最小节点"之前的全部元素重新构造成最小堆);
(02) 接着,再将最小堆中的最小节点拷贝一份并将其赋值right,然后再次重塑最小堆;
(03) 然后,新建节点parent,并将它作为left和right的父节点;
(04) 接着,将parent的数据复制给最小堆中的指定节点。
2 进入for循环:
(01) 首先,将最小堆中的最小节点拷贝一份并赋值给left,然后重塑最小堆(将最小节点和后面的节点交换位置,接着将"交换位置后的最小节点"之前的全部元素重新构造成最小堆);
(02) 接着,再将最小堆中的最小节点拷贝一份并将其赋值right,然后再次重塑最小堆;
(03) 然后,新建节点parent,并将它作为left和right的父节点;
(04) 接着,将parent的数据复制给最小堆中的指定节点。
相关文章推荐
- Java实现哈夫曼树(HuffmanTree)
- (哈夫曼树)HuffmanTree的java实现
- 哈夫曼树(Huffman Tree)与哈夫曼编码
- Huffman tree(赫夫曼树、霍夫曼树、哈夫曼树、最优二叉树)
- 数据结构基础5.5:哈夫曼树(HuffmanTree)的构造
- 6-9-哈夫曼树(HuffmanTree)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- 哈夫曼树(Huffman Tree)
- 哈夫曼树 Huffman tree 原理
- 哈夫曼树(Huffman Tree) 实现
- 数据结构.哈夫曼树(HuffmanTree)
- 哈夫曼树(Huffman tree)->一种二叉树
- Linux 下编程练习--Minheap/HuffManTree/HuffManCode
- 哈夫曼树(huffman)--最优二叉树的编码实现
- [C语言]哈夫曼树(Huffman)的构造与实现
- DSOJ Huffman coding tree(Huffman编码树)
- 哈夫曼树(Huffman)的JS实现
- Huffman Tree 建立与编码
- dot实现HuffmanTree动态可视化
- ※数据结构※→☆非线性结构(tree)☆============哈夫曼树 顺序存储结构(tree Huffman sequence)(二十二)