計算機機試題 哈夫曼樹

2021-08-21 07:50:33 字數 924 閱讀 7471

題目描述:

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

輸入:

輸入有多組資料。

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

輸出:

輸出權值。

樣例輸入:

5  

1 2 2 5 9

樣例輸出:

37

2023年北京郵電大學計算機研究生機試真題

解題思路:

這個題有兩種做法,一種是不使用堆結構,另一種是使用堆結構。

首先是不使用堆結構的,我們使用純c的方式來解答:

#include#includeint cmp(const void *a, const void *b)

int main()

{ int n;

while(scanf_s("%d", &n)!=eof)

{ int a[1001];

int sum=0;

for(int i=0; i對於堆,接下來要跳過它的實現,直接使用c++中的模版庫

使用語句 priority_queueq; 會建立乙個大頂堆;

使用語句 priority_quene, greater> q會建立乙個小頂堆。

還有就是push,pop和top函式。

這裡**我就不寫了,反正也是從書上來的。而且我現在使用的vs2012環境不支援這個。最近改行要用這個環境來寫演算法了。而且更多考慮c語言了。

王道計算機機試練習 哈夫曼樹

題目描述 哈夫曼樹,第一行輸入乙個數 n,表示葉結點的個數。需要用這些葉結點生 成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即 weight,題目需要輸出 所有結點的值與權值的乘積之和。1 將所有結點放入集合 k。2 若集合 k 中剩餘結點大於 2 個,則取出其中權值最小的兩個結點,構造他 們同...

哈夫曼編碼 哈夫曼樹

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

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...