求能建立最优二叉树函数,并且可以建立函数输入二叉树,并输出其哈夫曼树的源代码!以下供参考
#include <stdio.h>
#include <iostream.h>
typedef int ElemType;
#include "Haffman.h"
void main()
{
int n,i;
BTreeNode *fbt=NULL;
cout<<"输入待构造的哈夫曼树中带权叶子结点数n:";
cin>>n;
ElemType *a=new ElemType[n];
cout<<"输入"<<n<<"个整数作为权值:";
for(i=0;i<n;i++)
cin>>a[i];
fbt=CreatHuffman(a,n);
cout<<"构造的哈夫曼树为:"<<endl;
PrintBTree(fbt,n);
cout<<"树中每个叶子的哈夫曼编码:"<<endl;
HuffManCoding(fbt,0);
}
Haffman.h:
struct BTreeNode{
ElemType data;
BTreeNode *left;
BTreeNode *right;
};
BTreeNode *CreatHuffman(ElemType a[],int n) //构造哈夫曼树
{
BTreeNode **b,*q;
b=new BTreeNode*[n];
int i,j;
for(i=0;i<n;i++){
b[i]=new BTreeNode;
b[i]->data=a[i];
b[i]->left=b[i]->right=NULL;
}
for(i=1;i<n;i++){
int k1=-1,k2;
for(j=0;j<n;j++){
if(b[j]!=NULL&&k1==-1){
k1=j;
continue;
}
if(b[j]!=NULL){
k2=j;
break;
}
}
for(j=k2;j<n;j++){
if(b[j]!=NULL){
if(b[j]->data<b[k1]->data){
k2=k1;
k1=j;
}
else if(b[j]->data<b[k2]->data)
k2=j;
}
}
q=new BTreeNode;
q->data=b[k1]->data+b[k2]->data;
q->left=b[k1];
q->right=b[k2];
b[k1]=q;
b[k2]=NULL;
}
delete []b;
return q;
}
void PrintBTree(BTreeNode *BT,int n) //以广义表形式输出哈夫曼树
{
int i;
if(BT!= NULL){
PrintBTree(BT->right,n+1);
for(i=0;i<n-1;i++)
cout<<" ";
if(n>0)
cout<<"--";
cout<<BT->data<<endl;
PrintBTree(BT->left,n+1);
}
}
void HuffManCoding(BTreeNode *BT, int len) //求哈夫曼编码
{
static int a[10];
if(BT!=NULL){
if(BT->left==NULL&&BT->right==NULL){
cout<<"结点权值为"<<BT->data<<"的编码:";
for(int i=0;i<len;i++)
cout<<a[i]<<' ';
cout<<endl;
}
else{
a[len]=0;
HuffManCoding(BT->left, len+1);
a[len]=1;
HuffManCoding(BT->right, len+1);
}
}
}
...全文
相关推荐
根据给定的n个权值构造哈夫曼树。通过遍历此二叉树完成哈夫曼编码。
①根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1, T2, …, Tn},其中每棵二叉树Ti中只有一个带树为Ti的根结点; ②在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置其根结点的权值为其左右子树权值之和; ③在F中删除这两棵树,同时将新得到的二叉树加入F中; ④重复②、③直到F只含一棵树为止。
哈夫曼树的建立(根据输入的权值,建立一棵哈夫曼树)
根据输入的权值建立一棵哈夫曼树,并显示该树的结点序号、双亲结点、左/右孩子结点以及各结点所对应的哈夫曼编码。
数据结构 哈夫曼树C语言源代码
数据结构哈夫曼树C语言源代码,很经典,备有详细注释,简单易懂,代码规范,学习数据结构的必看。
从文件读取字符串建立哈夫曼树并进行哈夫曼编码
利用文件中的字符资源建立哈夫曼树,利用建立的哈夫曼树对给定的字符串进行编码。资源中含有可执行的源代码以及实验报告。
哈夫曼树压缩算法实现
这是我做的一个基于哈夫曼树思想的压缩算法程序源码,希望大家指正


