第十周项目实践 哈夫曼树的建立哈夫曼编码
生活随笔
收集整理的這篇文章主要介紹了
第十周项目实践 哈夫曼树的建立哈夫曼编码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
typedef struct
{char date;int lchild,rchild;int parent;
}HTnode;
void CreateHTnode(HTnode ht[],int n)
{int min1,min2,lnode,rnode;for(int i=0;i<2*n-1;++i)//所有節點的相關值置為-1{ht[i].prent=ht[i].lchild=ht[i].rchild-1;}for(int i=n;i<2*n-1;++i)//構造哈夫曼樹{min1=min2=inf;lnode=rnode=-1;//代表2個最小權重的節點位置for(int j=0;j<i;++j)//在【0,i)中尋找最小權重的節點{if(ht[j].praent=-1)//在先前尚未找過的節點中進行查找{if(ht[j].date<min1)//判斷是否是左節點{min2=min1,rnode=lnode;min1=ht[j].date,lnode=j;}else if(ht[j].date<min2)//判斷是否是右節點。基于思想,不能寫成else 也不能寫成if{min2=ht[j].date,rnode=j;}}}//雙親節點的處理:ht[i].date=ht[lnode].date+ht[rnode].date;ht[i].lchild=lnode,ht[i].rchild=rnode;ht[lnode].parent=ht[rnode].parent=i;}
}數據結構李春葆第五版P239哈夫曼編碼:typedef struct
{char cd[N];//存放當前節點的哈夫曼嗎int start;//表示cd[start...n0]部分是哈夫曼碼//因為哈夫曼樹中每個葉子節點的哈夫曼編碼長度不同,為此采用HCode類型的變量的cd[start..n0]存放當前結點的哈夫曼碼
}HCode;
void createHCode(HTNode ht[],Hcode hcd[],int n0)
{Hcode hc;int c,f;for(int i=0;i<n0;++i)//根據哈夫曼樹求哈夫曼碼{hc.start=n0,c=i;f=ht[i].parent;while(f!=-1)//直到循環到無雙親節點,即到達根節點{if(ht[f].lchild==c)//當前節點是雙親節點的左孩子hc.cd[hc.start--]='0';elsehc.cd[hc.start--]='1';//右孩子c=f,f=ht[f].parent;//反復進行同樣的操作}hc.start++;//start指向哈夫曼樹編碼的最開始的字符hcd[i]=hc;}
}
總結
以上是生活随笔為你收集整理的第十周项目实践 哈夫曼树的建立哈夫曼编码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第10周项目实践 线索二叉树的建立及遍历
- 下一篇: 第九周项目实践3 利用二叉树遍历思想解决