#define maxbit 10//哈夫曼編碼的最大長度
#define maxvalue 1000//哈夫曼樹葉子節點的權值的最大值
typedef struct hnode//定義節點結構
hnode;
typedef struct hcode//哈夫曼編碼結構
hcode;
//構造哈夫曼樹,以及求出n個字元對應的哈夫曼編碼
void huffmancoding(hnode *ht, hcode *c,
int*w,
int n)
for(
;i++i,
++p)
//初始化分支節點資訊
//尋找根節點權值最小和次小的兩棵子樹
for(i=n;i
++i)
else
if(ht[j]
.parent==-1
&& ht[j]
.weight
//合併成一顆子樹
//i是x1和x2的雙親節點
ht[x1]
.parent=i;
ht[x2]
.parent=i;
ht[i]
.lchild=x1;
ht[i]
.rchild=x2;
ht[i]
.weight=m1+m2;}}
//字元編碼,從葉子節點找到到根節點的一條路徑,左分支=
0,右分支=
1,從根節點到葉子節點的0
1串構成了哈夫曼編碼
hc=(hcode *
)malloc(n)
*sizeof(hcnode)
;for
(i=0
;i//對n個葉子節點 }
樹與二叉樹 哈夫曼樹
01 路徑和路徑長度 定義 在一棵樹中,從乙個結點往下可以達到的孩子或孫子結點之間的通路,稱為路徑。通路中分支的數目稱為路徑長度。若規定根結點的層數為1,則從根結點到第l層結點的路徑長度為l 1。例子 100和80的路徑長度是1,50和30的路徑長度是2,20和10的路徑長度是3。02 結點的權及帶...
二叉樹與哈夫曼樹
1,二叉樹 二叉樹可以分為 完全二叉樹,滿二叉樹,哈夫曼樹 二叉樹的遍歷 遞迴 先序,中序,後序遍歷 二叉樹的結構 根節點,左子樹,右子樹 二叉樹的性質 1 如果二叉樹的節點個數為n,則父節點的個數為n 2 2 若2i 1 3 若2i 2 二叉樹的構建 構建二叉樹 public void creat...
哈夫曼樹(最優二叉樹)
給定n個權值作為n的 葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小 所謂樹的帶權路徑長度,就是樹中所有的葉結點 的權值乘上其到根結點的路徑長度 稱這樣的二叉樹為最優二叉樹,也稱為哈夫曼樹 huffman tree 哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。假設有n個權值,則構造出的...