求哈夫曼樹的權值

2021-09-07 04:28:49 字數 685 閱讀 9007

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。

輸入有多組資料。

每組第一行輸入乙個數n,接著輸入n個葉節點(葉節點權值不超過100,2<=n<=1000)。

輸出權值。

5  

1 2 2 5 9

37

給定n個權值作為n個

葉子結點

,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹(huffman tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。

利用優先佇列來求解,每次從佇列中取出最小值和次小值累加之後再入隊,一直算到結點大小為1,即根結點為止。

#include using namespace std;

//哈夫曼樹類問題

int main()

int sum = 0;

while(l.size() != 1) //當結點大小不為1時

cout << sum << endl;

return 0;

}

哈夫曼樹 哈夫曼樹求帶權路徑和

首先要了解哈夫曼樹的一些概念 帶權路徑 每個葉子結點都有權值,對於某葉子結點來說,它的帶權路徑就是 結點權值 從根節點到該結點的路徑長度 哈夫曼樹的構造方法 兩個權值最小的葉子結點作為兄弟去構成乙個非葉節點。該父親非葉節點的權值 二者之和 之前我只知道這些基本概念,求帶權路徑和的時候也只是 數數 數...

給定權值求哈弗曼樹

include include using namespace std define maxsize 10 typedef int elemtype typedef struct btreenode btreenode 根據陣列 a 中 n 個權值建立一棵哈夫曼樹,返回樹根指標 btreenode ...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....