#include<>
#include<>
#include<>
#include<string>
#define MAX_NUMBER_OF_TREE_NODES 20
//树结点类型定义
typedef struct
{
unsigned int weight;
unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;
//子函数申明部分
void InitTreeNode(HTNode);
void CinWeightForTreeNode(HTNode);
void GiveOrderForTreeNode(HTNode);
void CopyTreeNodeOrTree(HTNode,HTNode);
int main()
{
//定义将要用于结构哈弗曼树结点
HTNode TreeNodes[MAX_NUMBER_OF_TREE_NODES+1];
//调用函数初始化数组结点
InitTreeNode(TreeNodes);
//由用户输入各个结点权值
CinWeightForTreeNode(TreeNodes);
//对数组中结点进行排序
GiveOrderForTreeNode(TreeNodes);
return true;
}
//初始化结点值,使全部为NULL
void InitTreeNode(HTNode *treenodes)
{
int i=1
//数组首结点用来存数部分信息,如weight域用来存放节点多少
//忽然想到了一个好处就是:等会我们几点不停降低过程中能够用首结点
//weight来指示剩下结点数目,做访问数组元素界限
treenodes[0].weight=MAX_NUMBER_OF_TREE_NODES;
treenodes[0].lchild=NULL;
treenodes[0].parent=NULL;
treenodes[0].rchild=NULL;
for(;i<=MAX_NUMBER_OF_TREE_NODES;i++)
{
treenodes[i].weight=0;
treenodes[i].lchild=0;
treenodes[i].rchild=0;
treenodes[i].parent=0;
}
}
void CinWeightForTreeNode(HTNode *treenodes)
{
int i=1;
cout<<"请输入每个结点权值:"<<endl;
for(;i<=MAX_NUMBER_TREE_NODES;i++)
{
cout<<"第"<<i<<"个结点权值是:"<<endl;
cin>>treenodes[i].weight;
}
}
void GiveOrderForTreeNode(HTNode *treenodes)
{
HTNode TemporarySave;
哈夫曼算法建立最优二叉树样稿 来自淘豆网m.daumloan.com转载请标明出处.