#include #include#include#define maxbit 100
#define maxvalue 10000
#define maxleaf 30
#define maxnode maxleaf*2 -1
typedef struct
hcodetype; /* 編碼結構體 */
typedef struct
hnodetype; /* 結點結構體 */
/* 構造一顆哈夫曼樹 */
void huffmantree (hnodetype huffnode[maxnode], int n)
/* end for */
/* 輸入 n 個葉子結點的權值 */
fflush(stdin);
for (i=0; i
/* end for */
/* 迴圈構造 huffman 樹 */
for (i=0; i
else if (huffnode[j].weight < m2 && huffnode[j].parent==-1)
} /* end for */
/* 設定找到的兩個子結點 x1、x2 的父結點資訊 */
huffnode[x1].parent = n+i;
huffnode[x2].parent = n+i;
huffnode[n+i].weight = huffnode[x1].weight + huffnode[x2].weight;
huffnode[n+i].lchild = x1;
huffnode[n+i].rchild = x2;
//printf ("x1.weight and x2.weight in round %d: %d, %d\n", i+1, huffnode[x1].weight, huffnode[x2].weight); /* 用於測試 */
//printf ("\n");
} /* end for */
} /* end huffmantree */
//解碼
void decodeing(char string,hnodetype buf,int num)
i=0;
nump=&num[0];
while(nump
else tmp=buf[tmp].rchild;
nump++;
} printf("%c",buf[tmp].value); }}
int main(void)
/* end while */
/* 儲存求出的每個葉結點的哈夫曼編碼和編碼的起始位 */
for (j=cd.start+1; j
huffcode[i].start = cd.start;
huffcode[i].value=huffnode[i].value;
} /* end for */
/* 輸出已儲存好的所有存在編碼的哈夫曼編碼 */
huffman樹和huffman編碼
huffman樹和huffman編碼 include include include include define overflow 1 typedef struct htnode,huffmantree typedef char huffmancode void select huffmantre...
Huffman樹與Huffman編碼
一.哈夫曼樹概念 路徑 祖先到節點之間的分支構成一條通往節點的路徑 路徑長度 路徑上分支的數目稱為路徑長度 節點的權 給樹中節點所設的物理意義的值 節點帶權路徑長度 從根到該點路徑長度與該點權值的乘機 huffman樹就是所有樹中每點帶權路徑加和最短的樹。二.huffman樹構造步驟 1.根據每個點...
Huffman樹與Huffman編碼
huffman tree簡介 赫夫曼樹 huffman tree 又稱最優二叉樹,是一類帶權路徑長度最短的樹。假設有n個權值,如果構造一棵有n個葉子節點的二叉樹,而這n個葉子節點的權值是,則所構造出的帶權路徑長度最小的二叉樹就被稱為赫夫曼樹。這裡補充下樹的帶權路徑長度的概念。樹的帶權路徑長度指樹中所...