哈夫曼树创建
- 从小到大将数组排序
- 创建一个等于前两个元素值的元素,将这三个元素创建为以新结点为根节点的子树
- 从整个数组中剔除前两个元素
- 加入新元素,
- 循环前面操作直到数组中元素个数为1
class huffnode implements Comparable<huffnode>{
//实现Comparable 接口 重写compareto方法,使得按照value从小到大排序
private int value;
private huffnode left;
private huffnode right;
public huffnode(int value) {
this.value = value;
}
public int getValue() {
return value;
}
public void setLeft(huffnode left) {
this.left = left;
}
public void setRight(huffnode right) {
this.right = right;
}
//前序遍历函数
private void preoder(){
System.out.println(this);
if(this.left!=null) this.left.preoder();
if(this.right!=null) this.right.preoder();
}
@Override
public String toString() {
return "huffnode{" +
"value=" + value +
'}';
}
//重写接口compareto方法 使其能够对value值进行从小到大排序
@Override
public int compareTo(huffnode o) {
return this.value-o.value;
}
}
class hufftree{
private int arr[];
public hufftree(int[] arr) {
this.arr = arr;
}
List<huffnode> nodes=new ArrayList<>();
public void hufftreecreat(int []arr)
{
for(int i:arr)
{
nodes.add(new huffnode(i));
}
while(nodes.size()>1)
{
Collections.sort(nodes);//对数组从小到大排序
huffnode leftnode=nodes.get(0);
huffnode rightnode=nodes.get(1);
//创建一个权值等于前两个元素权值和的元素
huffnode newnode=new huffnode(leftnode.getValue()+rightnode.getValue());
//新元素子结点设置为前两个元素
newnode.setLeft(leftnode);
newnode.setRight(rightnode);
//从集合中取出前两个元素
nodes.remove(rightnode);
nodes.remove(leftnode);
nodes.add(newnode);
}
}