//建立日期2017.2.22
//哈夫曼樹
#include#include#include#includeusing namespace std;
typedef struct
node;//data是數值、其他的存陣列下標
node *treee;
int huffman(int *a, int n)
for (int i = n; i < m; i++) //非葉子節點
else if (tree[j].data < min2)
}} tree[i].leftchild = min(pos1, pos2);
tree[i].rightchild = max(pos1, pos2);
tree[i].data = tree[pos1].data + tree[pos2].data;
tree[pos1].parent = i;
tree[pos2].parent = i;
ans += tree[i].data;
} treee = tree;//為了把構造好的哈夫曼樹用全域性變數傳遞出來
return ans;//哈夫曼樹最小權值
}int main()
構造的哈夫曼樹的帶權路徑長度" << endl;
//n個數字,排列出哈夫曼樹
cout << "請輸入要輸入的元素的個數" << endl;
cin >> n;
cout << "請輸入各個元素的值(非負數)" << endl;
for (int i = 0; i < n; i++)
cin >> num[i];
cout << "所得結果:"<}
哈夫曼樹 哈夫曼樹求帶權路徑和
首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...
筆試 面試 哈夫曼樹的帶權路徑長度
設一組權值集合 w 15 3 14 2 6 9 16 17 要求根據這些權值集合構造一棵哈夫曼樹,則這棵哈夫曼樹的帶權路徑長度為 計算方法 先對集合中的結點按照權值從小到大排序。選兩個權值最小的點將它們的權值相加構成乙個新結點,原來的這兩個最小的值是新結點的左右子結點。在有序集合中將兩個被加過的結點...
求哈夫曼樹的權值
哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 n 1000 輸出權值。5 1 2 2 ...