(4 3)樹與二叉樹之哈夫曼樹

2021-10-03 09:48:57 字數 1049 閱讀 6827

#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個權值,則構造出的...