📄 extbintree.h
字号:
/////////////////////////////////////////////////////////////////////
// ExtBinTree.h: interface for the ExtBinTree class.
//
// PROGRAM BY : SINGLE LAO
// DATE : 2004. 5. 25
// VERSION : DEBUG 1.1
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_EXTBINTREE_H__A976920E_955C_46E5_B481_2531A77D1EEA__INCLUDED_)
#define AFX_EXTBINTREE_H__A976920E_955C_46E5_B481_2531A77D1EEA__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "MinHeap.cpp"
#include "MinHeap.h"
using namespace std;
template<class Type> class ExtBinTree;
template<class Type>
class Element
{
friend class ExtBinTree<Type>;
friend class Huffman;
private:
Type data;
Element<Type> *leftChild,*rightChild;
};
template<class Type>
class ExtBinTree
{
friend class Huffman;
public:
ExtBinTree()
{
root = new Element<Type>;
root->leftChild = NULL;
root->rightChild = NULL;
};
ExtBinTree(ExtBinTree<Type> & bt1,ExtBinTree<Type> & bt2)
{
root = new Element<Type>;
root->leftChild = bt1.root;
root ->rightChild = bt2.root;
root->data = bt1.root->data + bt2.root->data;
key = bt1.key + bt2.key;
};
void HuffmanTree(MinHeap<ExtBinTree<Type> >* hp,Type* fr,int n,ExtBinTree<Type> & newtree);
int key;
protected:
enum{DefaultSize = 256};
Element<Type> * root;
};
template<class Type>
void ExtBinTree<Type>::HuffmanTree(MinHeap<ExtBinTree<Type> >* hp,Type* fr,int n,ExtBinTree<Type> & newtree)
{
ExtBinTree<Type> first, second;
ExtBinTree<Type> Node[DefaultSize];
if (n > DefaultSize)
{
cerr<<"Size n"<< n<<"exceeds the boundary of Array"<<endl;
return;
}
for (int i = 0; i<n; i++)
{
Node[i].root->data = fr[i];
Node[i].root->leftChild = NULL;
Node[i].root ->rightChild = NULL;
Node[i].key = fr[i].key;
}
hp = new MinHeap<ExtBinTree<Type> >(Node,n);
for (i= 0;i<n-1;i++)
{
hp->RemoveMin(first);
hp->RemoveMin(second);
newtree = *(new ExtBinTree<Type> (first,second) );
hp->Insert(newtree);
}
}
#endif // !defined(AFX_EXTBINTREE_H__A976920E_955C_46E5_B481_2531A77D1EEA__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -