哈夫曼樹的構造與哈夫曼編碼

2021-08-01 13:02:04 字數 1106 閱讀 5493

#include

#include

#include

#define n 20//葉子結點最大值

#define m 2*n-1//所有結點最大值

//靜態三叉鍊錶實現哈夫曼樹

typedef

struct huffmanhuf_node,huf_tree[m+1];

//儲存哈夫曼編碼串的頭指標陣列

//由於每個哈夫曼編碼是變長編碼,因此使用指標陣列存放每個編碼串的頭指標

typedef

char* huf_code[n+1];

//尋找權值最小的兩個結點

//在ht[1]~ht[k]的範圍內選擇兩個parent為0且weight最小的結點,其序號分別賦值給a,b

void select(huf_tree ht,int k,int* a,int* b)

int m=2*n-1;

for(i=n+1;i<=m;i++)

for(i=n+1;i<=m;i++)

//輸出哈夫曼樹

printf("哈夫曼樹的終態:\n");

for(i=1;i<=2*n-1;i++)

} //求哈夫曼樹的哈夫曼編碼

void cre_huf_code(huf_tree ht,huf_code hc,int n)//結束時哈夫曼編碼儲存在以cd為首位址的陣列中

//為第i個編碼分配空間

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

strcpy(hc[i],&cd[start]);//把改結點的哈夫曼編碼複製到hc[i]中

} free(cd);

} //輸出各個葉子結點的哈夫曼編碼

void visit_huf_code(huf_code hc,int n)

printf("\n");

}}int main()

create(ht,w,n);

huf_code hc;

cre_huf_code(ht,hc,n);

visit_huf_code(hc,n);

return

0;}

構造哈夫曼樹 哈夫曼編碼

1.權值越大的節點,距離根越近 2.樹中沒有度為1的節點,這類樹叫正則 嚴格 二叉樹,樹的總節點 2 雙分支結點 1 單分支結點 雙分支結點 3.樹的帶權路勁 wpl 所有葉子結點的帶權長度路勁之和 長度最短。嗶哩嗶哩王卓老師的口訣 構造森林全是根,選用兩小選新樹,刪除兩小添新人,重複23剩單根 1...

哈夫曼樹構造 哈夫曼編碼

一 哈夫曼樹 p189 1.定義 帶權路徑長度 wpl 最小的二叉樹稱為哈夫曼樹 wpl 樹中所有葉子節點的帶權路徑長度之和 帶權路徑長度 從樹根到任意節點的路徑長度與該節點上權值的乘積 2.構造 1 將這n個節點分別作為n課僅含乙個結點的二叉樹,構成森林f 2 構造乙個新節點,從f中選取兩棵根節點...

哈夫曼樹與哈夫曼編碼

在一般的資料結構的書中,樹的那章後面,著者一般都會介紹一下哈夫曼 huffman 樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的乙個應用。哈夫曼編碼應用廣泛,如 jpeg中就應用了哈夫曼編碼。首先介紹什麼是哈夫曼樹。哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的...