用n個帶權值構造的哈夫曼樹的帶權路徑長度

2021-08-30 21:43:11 字數 892 閱讀 1920

//建立日期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 ...