問題分析:huffman樹即最優二叉樹,問題不再詳細描述了。下面說下實現的過程的要注意的問題。
1.先從森林中取出兩個權值最小的結點(乙個最小,乙個次小)這兩個結點作為乙個雙親結點的兩個孩子結點,雙親的權值為兩個孩子結點權值之和。
2.把該雙親結點放回到森林,再去取出最小的結點(乙個最小,乙個次小),重複1過程,直到森林只剩乙個結點。但此時並不是只剩乙個結點,而是變成一棵樹,
3.返回樹的根結點,然後中序(或前序後序)遍歷輸出。
當只剩乙個結點時出迴圈while(h->next!=null)
此時while的大迴圈裡應該是1過程的重複
有兩個注意點:
(1)為了方便起見:可以在結構體裡面除了left域和right域外再加乙個next域,這樣你在輸入葉子結點的時候就可以掛成乙個鍊錶。
(2)在迴圈裡每重複1過程都要對鍊錶進行排序,注意你的鍊錶是否有頭結點這些細節問題。
下面是核心**
//有頭結點的鍊錶while迴圈終止條件為h->next->next==null
//沒有頭結點的鍊錶while迴圈終止條件為
h->next==null
while(h->next->next)
總結:編碼之前先對問題分析清楚,磨刀不誤砍柴工。理清思路,編碼的時候還是要注意細節,比如你的鍊錶有木有頭結點,變數型別小問題等。
Huffman樹與Huffman編碼
一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...
Huffman樹與Huffman編碼
huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...
huffman樹和huffman編碼
huffman樹和huffman編碼 include include include include define overflow 1 typedef struct htnode,huffmantree typedef char huffmancode void select huffmantre...