構造哈夫曼樹c語言程式

2021-08-20 08:41:23 字數 1245 閱讀 2789

#include

#include

#include

int m,s1,s2;

typedef structhtnode,*huffmantree;//動態分配陣列儲存哈夫曼樹

typedef char *huffmancode;//動態分配陣列儲存哈夫曼編碼表

void select(huffmantree ht,int n)

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

if(!ht[j].parent)

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

if((ht[s1].weight>ht[i].weight)&&(!ht[i].parent)&&(s2!=i))

s1=i;

if((ht[s2].weight>ht[j].weight)&&(!ht[j].parent)&&(s1!=j))

s2=j;

}//w存放n個字元的權值(均大於0),構造哈夫曼樹ht,

//並求出n個字元的哈夫曼編碼hc

void huffmancoding(huffmantree &ht,huffmancode hc,int *w,int n)

for(i=n+1;i<=m;i++)//初始化

puts("\n哈夫曼樹的構造過程如下圖所示:");

printf("ht初態:\n 結點 weight parent lchild rchild");

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

printf("\n%4d%8d%8d%8d%8d",i,ht[i].weight,

ht[i].parent,ht[i].lchild,ht[i].rchild);

printf("按任意鍵,繼續......");

getchar();

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

//遞迴遍歷哈夫曼樹,求哈夫曼編碼

cd=(char *)malloc(n*sizeof(char));//分配求編碼的工作空間

p=m;

cdlen=0;

for(i=1;i<=m;i++)//遍歷哈夫曼樹時用作結點狀態標誌

ht[i].weight=0;

while(p)

else

if(ht[p].rchild==0)//登記葉子結點的字元編碼

}else

if(ht[p].weight==1)//向右

}else

}}//huffmancoding

int main()

構造哈夫曼樹 哈夫曼編碼

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

哈夫曼樹構造 哈夫曼編碼

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

哈夫曼樹構造

usr bin env python3 coding utf 8 created on fri jul 27 18 08 26 2018 author luogan 樹節點類構建 class treenode object def init self,data self.val data 0 sel...