通過寫這個編碼和huffman樹的構建,讓我對huffman tree 有了更深的理解:
1:首先huffman是經過n-1次迭代之後生成的樹,所以如果開始的節點有n個的話,那麼生成之後的的樹的節點個數是2*n-1
2:編碼的話可以用dfs處理;
3:樹的節點新加了乙個parents值,讓我學到了一種新的寫法。//在挑選最小值的時候需要
#include#include #include #include #include using namespace std;
struct element
;// 選取權值最小的兩個結點
void selectmin(element a,int n, int &s1, int &s2)
}for (; i < n; i++)// s1為權值最小的下標
for (j = 0; j < n; j++)
}for (; j < n; j++)// s2為另乙個權值最小的結點
}// 哈夫曼演算法
// n個葉子結點的權值儲存在陣列w中
void huffmantree(element huftree, mapmp, int n)
int i=0;
for(map::iterator iter=mp.begin();iter!=mp.end();iter++)
for (int k = n; k < 2 * n - 1; k++) // n-1次合併
}// 列印哈夫曼樹
void print(element ht,int n)
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...