www.pudn.com > huffman_.zip > huffman_c.h


#ifndef _HUFFMAN_C_HEADER_001_
#define _HUFFMAN_C_HEADER_001_

#include "huffman_base.h"

// 使用Canonical Huffman编码,同时对huffman_b的存储结构进行
// 改造,将二叉树存放在连续空间tree里,空间的每个结点类型都
// 和结点权值的数据类型相同,空间大小为2*num,tree[0]未用,
// tree[1..num]是每个元素的权值。生成Huffman后,tree[1..2*num-1]
// 中存储的是双亲结点索引

class huffman_c :
	public huffman_base
{
public:
	huffman_c() {}	
	virtual ~huffman_c(void) {}

public:
	void generate_codes(int num, const unsigned long* weights);

protected:
	// 在HT[1..n]中选择尚未连入Huffman树且weight最小的两个结点,返回其序号s1和s2
	void select(unsigned long* tree, bool* flags, int n, int& s1, int& s2);
};

#endif