📄 myhuffmantree.java
字号:
package compress;
public class MyHuffmanTree
{
private int weight;
private int parent;
private int lchild;
private int rchild;
private int[][] HC;
public MyHuffmanTree()
{
// TODO Auto-generated constructor stub
}
//建立huffman树及其编码
public void CreatHuffmanTree(MyHuffmanTree[] HT,int[] w)
{
int n=w.length;
if (n<1) return;
int m=2*n-1;
for(int i=1;i<=n;i++)
HT[i].setHT(w[i-1],0,0,0);
for(int i=n+1;i<=m;i++)
HT[i].setHT(0,0,0,0);
for(int i=n+1;i<=m;i++)
{
int s1=this.Select(HT,i-1);
int s2=this.Select(HT,i-1);
HT[s1].setParent(i);
HT[s2].setParent(i);
HT[i].setLchild(s1);
HT[i].setRchild(s2);
HT[i].setWeight(HT[s1].getWeight()+HT[s2].getWeight());
}
HC=new int[n+1][];
int[] cd=new int[n];
for(int i=1;i<=n;i++)
{
int start=0;
for (int c=i,f=HT[i].getParent(); f!=0; c=f,f=HT[f].getParent())
{
if (HT[f].getLchild()==c)
cd[++start]=0;
else cd[++start]=1;
}
int cdlength=start;
HC[i]=new int[cdlength];
for(int j=0;j<cdlength;j++)
{
this.setHC(i,j,cd[start]);
start--;
}
}
}
//选取该树num以上节点的父母未知的最小节点
public int Select(MyHuffmanTree[] HT,int num)
{
int order=1;
while(HT[order].parent!=0)
{
order++;
}
int min=HT[order].getWeight();
int s=order;
for(int i=1;i<=num;i++)
{if(HT[i].getWeight()<min&&HT[i].getParent()==0)
{
min=HT[i].getWeight();
s=i;
}
}
HT[s].setParent(1);
return s;
}
public void setHT(int weight,int parent,int lchild,int rchild)
{
this.setWeight(weight);
this.setParent(parent);
this.setLchild(lchild);
this.setRchild(rchild);
}
public int getLchild()
{
return lchild;
}
public int getParent()
{
return parent;
}
public int getRchild()
{
return rchild;
}
public int getWeight()
{
return weight;
}
public void setLchild(int lchild)
{
this.lchild = lchild;
}
public void setParent(int parent)
{
this.parent = parent;
}
public void setRchild(int rchild)
{
this.rchild = rchild;
}
public void setWeight(int weight)
{
this.weight = weight;
}
public void setHC(int i,int j,int hc)
{
HC[i][j] = hc;
}
public int getHC(int i,int j)
{
return HC[i][j];
}
public int[] getHC(int i)
{
return HC[i];
}
public int[][] getHC()
{
return HC;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -