HuffmanTree 改进
来源:互联网 发布:搞笑网络歌曲 编辑:程序博客网 时间:2024/05/22 03:27
#include <iostream>
using namespace std;
struct Node
{
int weight;
int parent;
int Lchild;
int Rchild;
};
class HuffmanTree
{
private:
Node *node;
int Num;
public:
HuffmanTree(int n);
void Order();
void Print();
};
//creat the Huffman tree
HuffmanTree::HuffmanTree(int n)//n is the total leaves,then2n-1 is the total nodes
{
Num = n;
node = new Node[2*Num-1];
for (int k=0;k<2*Num -1;k++)
{
if (k<Num)
{
printf("please input every weight\n");
scanf("%d",&node[k].weight);
}
else
{
// isn't leaf
node[k].weight=0;
}
node[k].parent=node[k].Lchild=node[k].Rchild=0;
}
for (int l=Num;l <2*Num-1;l++)
{
int min1=32767;
int min2=32767;//store the two min value
int p1=0;
int p2=0;//store the index
for (int j=0;j<=l-1;j++)
{
if (node[j].parent==0)
{
if (node[j].weight<min1)
{
min2=min1;
p2=p1;
p1=j;
min1=node[j].weight;
}
else
if (node[j].weight<min2)
{
min2=node[j].weight;
p2=j;
}
}
}
//please ensure the code's position
node[l].Lchild=p1;
node[l].Rchild=p2;
node[l].weight=min1+min2;
node[p1].parent=l;;
node[p2].parent=l;
}
}
void HuffmanTree::Order()
{
//bubbling way
int flag;
int temp;
for (int i=0;i<Num-1;i++)
{
flag=1;
for (int j=0;j<Num-i-1;j++)
{
if (node[j].weight>node[j+1].weight)
{
temp=node[j].weight;
node[j].weight=node[j+1].weight;
node[j+1].weight=temp;
flag=0;
}
}
if (flag==1)
{
printf("the order is completed in the times of ");
printf("%d",i );//the order is completed
cout<<endl;
break;
}
}
return;
}
void HuffmanTree::Print()
{
for (int l=0;l<2*Num-1;l++)
cout<<node[l].weight<<endl;
return;
}
int main()
{
cout<<"please input the numberof leaves"<<endl;
int number;
cin>>number;
HuffmanTree test_tree_(number);
test_tree_.Order();
cout<<"the following is theresult"<<endl;
cout<<"from the bottom to thetop ,and from the left to theright"<<endl;
test_tree_.Print();
return 0;
}
- HuffmanTree 改进
- HuffmanTree
- HuffmanTree
- HuffmanTree
- HuffmanTree
- HUffmanTree
- 构造HuffmanTree
- 哈夫曼树HuffmanTree
- 哈夫曼树Huffmantree
- 改进版的poll epoll
- HuffmanTree的实现
- java代码创建HuffmanTree
- 数据结构.哈夫曼树(HuffmanTree)
- Java实现HuffmanTree
- 【数据结构】中的哈弗曼树-HuffmanTree
- HuffmanTree的构建
- c语言构建HuffmanTree
- HuffmanTree以及其编码
- 随机生成六位密码(c语言)
- [转]二叉树的建立和遍历
- 二叉树先序、中序、后序三种遍历的…
- 二叉树遍历大杂烩(递归,非递归)
- 哈夫曼树的创建以及冒泡排序法的应…
- HuffmanTree 改进
- 折半法的简单应用
- 内存管理
- 最大公约数问题
- 异或的性质及运用
- android 随手记 sqlite使用
- 关于if(!cin)
- explicit构造函数
- 100的阶乘