Huffman樹編碼 DFS實現

2021-09-11 07:24:56 字數 803 閱讀 2343

通過寫這個編碼和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...