九度OJ 1172 哈夫曼樹

2021-07-26 11:42:40 字數 1070 閱讀 9591

由於建立的哈夫曼樹不唯一,所以機試多考察哈夫曼樹的帶權路徑長度和,如此題。此問題最終轉化為利用堆模擬建樹過程,求出非葉節點的權值和(=該哈夫曼樹的帶權路徑長度和)。(無需作出哈夫曼樹的具體結構體)

收穫如下:

①關於哈夫曼樹:該樹非葉節點的權值和=該哈夫曼樹的帶權路徑長度和

②關於堆排序:堆排序建堆o(n*logn),初始堆完成後,每次重新調整只需o(logn)(樹深),故是效率很高的動態排序演算法,以後動態排序要想到它(具體分析見王道堆排序)

③關於堆模板:即「優先佇列」,在標頭檔案中

1.大根堆:

priority_queue《型別》 q;

2.小根堆

priority_queue《型別,vector《型別》,greater《型別》 >

//(此處「> >」必須要有空格)(小根堆或可使用該型別比較運算子過載來實現)

3.其大部分函式與stack模板一致

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

輸入:輸入有多組資料。

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

輸出:輸出權值。

樣例輸入:

5  

1 2 2 5 9

樣例輸出:

37

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

答疑:

#include #include using namespace std;

int main()

//input

for (int i=0;i>k;

h.push(k);

}//process

for (int i=0;i

九度OJ1172 哈夫曼樹

題目描述 哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入 輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 n 1000 輸出 輸出...

九度OJ 1172 哈夫曼樹

哈夫曼樹,第一行輸入乙個數n,表示葉結點的個數。需要用這些葉結點生成哈夫曼樹,根據哈夫曼樹的概念,這些結點有權值,即weight,題目需要輸出所有結點的值與權值的乘積之和。輸入有多組資料。每組第一行輸入乙個數n,接著輸入n個葉節點 葉節點權值不超過100,2 n 1000 輸出權值。5 1 2 2 ...

九度OJ 1172 哈夫曼樹

九度oj 1172 哈夫曼樹 哈夫曼樹 huffman tree 給定n 個權值作為 n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱這樣的二叉樹為最優二叉樹,即哈夫曼樹 這題可以建樹,也可以不建樹。建樹 include include include define maxvalue 0x7...