文档介绍:#include<>#include<>#include<>#include<string>#defineMAX_NUMBER_OF_TREE_NODES20//树的结点的类型定义typedefstruct{ unsignedintweight; unsignedintparent,lchild,rchild;}HTNode,*HuffmanTree;//子函数的声明部分voidInitTreeNode(HTNode);voidCinWeightForTreeNode(HTNode);voidGiveOrderForTreeNode(HTNode);voidCopyTreeNodeOrTree(HTNode,HTNode);intmain(){ //定义将要用于构造哈弗曼树的结点 HTNodeTreeNodes[MAX_NUMBER_OF_TREE_NODES+1]; //调用函数初始化数组结点 InitTreeNode(TreeNodes); //由用户输入各个结点的权值 CinWeightForTreeNode(TreeNodes); //对数组中的结点进行排序 GiveOrderForTreeNode(TreeNodes); returntrue;}//初始化结点值,使全部为NULLvoidInitTreeNode(HTNode*treenodes){ inti=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; }}voidCinWeightForTreeNode(HTNode*treenodes){ inti=1; cout<<"请输入每个结点的权值:"<<endl; for(;i<=MAX_NUMBER_TREE_NODES;i++) { cout<<"第"<<i<<"个结点的权值是:"<<endl; cin>>treenodes[i].weight; }}voidGiveOrderForTreeNode(HTNode*treenodes){ HTNodeTemporarySave; //CopyTreeNodeOrTree(treenodes[1],TemporarySave); inti=2; intcount=1; intj=treenodes[0].weight; for(;i<=j;i++) { if(treenodes[co