哈夫曼樹及其編碼

2021-10-12 01:12:12 字數 1289 閱讀 8227

#include#include#include#includeusing namespace std;

#define ok 1

#define error 0

#define true 1

#define false 0

typedef int status;

/*定義哈夫曼樹結點*/

typedef struct htnode

;typedef struct htnode* huffmantree;

typedef char* huffmancode;

//前k棵樹中找到權重最小的樹

int min(huffmantree ht, int k)

} ht[min].parent = 1;

return min;

}//從前k棵樹中選出權重最小的兩棵樹,將其序號賦給min1和min2

status selectmin(huffmantree ht, int k, int& min1, int& min2)

//建立一棵哈夫曼樹,-1表示不存在

huffmantree creathuffmantree(huffmantree ht, int* wet, int n)

//對n到total的分量進行初始化

for (i = n; i < total; i++)

int min1 = 0, min2 = 0;

for (i = n; i < total; i++)

return ht;

}status huffmantreecoding(huffmantree ht, huffmancode& hc, int n)

hc[i] = char(*)malloc((n - start) * sizeof(char));

if (!hc[i])

return error;

strcpy(hc[i].code + start);

} free(code);

code = null;

return ok;

}int main()

printf_s("請輸入要編碼的字元權值");

for (i = 0; i < amount; i++)

huffmantree ht;

ht = creathuffmantree(ht, wet, amount);

for (i = 0; i < amount; i++)

free(wet);

return ok;

}

哈夫曼樹及其編碼

首先是哈夫曼樹的定義 在一棵二叉樹中,帶權路徑長度達到最小,成這樣的樹是最優二叉樹,也是哈弗曼樹。大概意思就是把數值大的節點放在樹上面,數值小的節點放在樹下面。哈夫曼樹的結構使用順序結構,這裡直接使用了陣列。建造哈弗曼樹的思路 根據二叉樹的性質,有n個葉子節點,二叉樹就會有2n 1個節點。定義乙個陣...

哈夫曼編碼 哈夫曼樹

1.定義 哈夫曼編碼主要用於資料壓縮。哈夫曼編碼是一種可變長編碼。該編碼將出現頻率高的字元,使用短編碼 將出現頻率低的字元,使用長編碼。變長編碼的主要問題是,必須實現非字首編碼,即在乙個字符集中,任何乙個字元的編碼都不是另乙個字元編碼的字首。如 0 10就是非字首編碼,而0 01不是非字首編碼。2....

哈夫曼樹 哈夫曼編碼

定義從a結點到b結點所經過的分支序列為從a結點到b結點的路徑 定義從a結點到b結點所進過的分支個數為從a結點到b結點的路徑長度 從二叉樹的根結點到二叉樹中所有結點的路徑長度紙盒為該二叉樹的路徑長度 huffman樹 帶權值路徑長度最小的擴充二叉樹應是權值大的外界點舉例根結點最近的擴充二叉樹,該樹即為...