题目描述
给定n个权值(权值均是大于0的正整数),构造赫夫曼树HT,并求出赫夫曼树HT的带权路径长度。
注意:构造赫夫曼树HT时,在将2棵二叉树合并成一棵新的二叉树时,将根结点权值小的用作左子树!
输入
先输入权值的个数n(n>1)。
然后依次输入n个权值(权值均是大于0的正整数)
输出
输出构造的赫夫曼树HT的带权路径长度。
样例输入:
8
5 29 7 8 14 23 3 11
思路难点:
1。构造哈夫曼树的流程;
2。求最小两个数并传出节点序号;
3。计算代树路径权值(利用叶子节点也就是一开始输入的点进行遍历操作);
#include<iostream>
#include<cstring>
using namespace std;
typedef struct
{
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
void Select(HuffmanTree HT,int len,int &s1,int &s2)//选择两个最小的且没有父母节点
{
/****在此下面完成代码***************/
int i=1,j;
int min=100;
int min2=100;
for(i=1;i<=len;i++){//普通的遍历求最小值
if(!HT[i].parent&