huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
? ?艾薇巴蒂!許久不見甚是想念,想必這”漲姿勢”的時刻大家已經期待許久了!今天我們要共同學習的是c語言構造哈夫曼樹-哈夫曼編碼
構造哈夫曼樹
首先,我們需要了解哈夫曼樹是什么:
相關知識點路徑:?
? ? ? ?路徑是指從一個節點到另一個節點的分支序列。
路徑長度:
? ? ? ?指從一個節點到另一個結點所經過的分支數目。,從根節點到a的分支數目是2,
數的路徑長度:
? ? ? ?樹中所有結點的路徑長度之和為樹的路徑長度PL 如圖pl為10
節點的權:
? ? ? ? 給樹的每個結點賦予一個具有某種實際意義的實數,我們稱該實數為這個結點的權
帶權路徑長度:
? ? ? ? 從樹根到某一結點的路徑長度與該節點的權的乘積,叫做該結點的帶權路徑長度樹的帶權路徑長度:?樹的帶權路徑長度為樹中所有葉子節點的帶權路徑長度之和。
構造Huffman樹的步驟:
? ? ? 1) 根據給定的n個權值,構造n棵只有一個根結點的二叉樹,n個權值分別是這些二叉樹根結點的權;
? ? ? 2) 設F是由這n棵二叉樹構成的集合,在F中選取兩棵根結點權值最小的樹作為左、右子樹,構造成一顆新的二叉樹,置新二叉樹根結點的權值等于左、右子樹根結點的權值之和。為了使得到的哈夫曼樹的結構唯一,規定根結點權值最小的作為新二叉樹的左子樹。
? ? ? 3) 從F中刪除這兩棵樹,并將新樹加入F;
? ? ? 4) 重復2)、3)步,直到F中只含一棵樹為止,這棵樹便是Huffman樹。
說明:n個結點需要進行n-1次合并,每次合并都產生一個新的結點,最終的Huffman樹共有2n-1個結點。
如何構建哈夫曼樹:
如上即可較為清晰的理解最優二叉樹的構造了。哈夫曼樹代碼的實現
所以:我們構成了一個哈夫曼樹的結點結構HTNode:
下面給出具體實現代碼:
? ? ? ?不會吧?不會吧?不會真的還有人看了小軟的課程還沒有明白吧?不明白也沒有關系哦,只要動動你可愛的小手指上滑再反復觀看,拍拍你聰明的小腦袋瓜就一定能了如指掌啦!
? ? ? ?小軟這就去再看一遍,讓我們一起加油,頂峰相見!
- END -
圖片來源:來源于網絡
責任編輯:劉泊璇? ?連雨歡
總結
以上是生活随笔為你收集整理的huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 韦东奕:被数学“选中”的天才
- 下一篇: 实验室最拼命的博士生,为什么却面临延毕?