用到了優先佇列的知識點,還有dfs演算法。
優先佇列主要是為了查詢最小權重樹的時候方便查詢,不用耗費很多的時間從已經產生的樹種依次查詢,
具體實現看**。
dfs主要是用來遍歷樹從而拿到每個字元的編碼,具體實現看**
#include#include#include#includeusing namespace std;
//節點樹模型
struct node
}node[200],tnode;
bool cmp(const node &p,const node& q)
void dfs(int n,string str)
for(int i=1;i<=n;++i)
//此時優先佇列中的節點數已經按權值由小到大的順序排好序。
sort(node+1,node+1+n,cmp);
for(int j=n+1;j<=2*n-1;++j)
if((!weizhi2)&&node[i].weight==weight2)}}
node[weizhi1].parentnode=j;
node[weizhi2].parentnode=j;
node[j].leftrchild=weizhi1;
node[j].rightchild=weizhi2;
node[j].weight=node[weizhi1].weight+node[weizhi2].weight;
que.push(node[j]);
}//此時樹已經建立完成
//cout
dfs(2*n-1,str);
}
優先佇列實現哈夫曼編碼(貪心法)
構造哈夫曼樹及輸出哈夫曼編碼,優先佇列構造最小堆實現 windows下輸入結束方法 enter,ctrl z,enter 執行結果如下 遍歷哈夫曼樹,列印哈夫曼編碼 void createhuffcode treenode root 如果是葉子結點,列印 if root lchild root rc...
哈夫曼編碼C 實現(優先佇列)(map對映)
哈夫曼樹是帶權路徑最短的最優二叉樹,即權值越小的結點里根節點越遠反之則越近。借助優先佇列,初始時,將所有的結點壓入優先佇列,權值越小優先順序越高,每次取兩個優先順序最小的結點,將其作為新節點左右孩子節點,再將新節點壓入優先佇列,再次選取兩個權值最小的結點,直到優先佇列中只剩下乙個結點,此節點作為根節...
哈夫曼編碼的C 實現(優先佇列 貪心)
哈夫曼編碼就是不斷地取數列中最小的兩個,合併,再新增到數列中,迴圈。利用了貪心的思想。在c 實現的時候可以用到優先佇列 priority queue,這個方便的東西。這個優先佇列,會自己進行排序,每次加進去乙個數,都會更新,降序排列或公升序排列。以公升序排列為例,更新過後的隊首元素就是數列中最小的數...