数据结构 JAVA描述(五)哈夫曼树,树与森林

本文介绍了哈夫曼树及其编码的相关概念,包括结点的带权路径长度和最优二叉树的定义。详细阐述了如何构造哈夫曼树和哈夫曼编码,并探讨了树、森林与二叉树之间的转换方法,如加线、删线和旋转。同时,列举了树的四种存储结构:双亲链表、孩子链表、双亲孩子链表和孩子兄弟链表存储结构。
摘要由CSDN通过智能技术生成

哈夫曼树及哈夫曼编码

相关概念:

  • 结点的带权路径长度: 该结点的路径长度 × 该结点的权值

  • 最优二叉树(哈夫曼树):给定n个权值并作为n个叶结点按一定规则构造的一棵二叉树,使其带权路径长度达到最小值,则这棵二叉树被称为最优二叉树。

  • 前缀编码:在所有字符的编码中,任何一个字符都不是另一个字符的前缀。

构造哈夫曼树和哈夫曼编码:

HuffmanTree :

package BiTree;

/**
 * @description 哈夫曼树结点结构
 *  
 * @date 2015年12月30日
 */
class HuffmanNode {
    private int weight; // 结点权值
    private int flag; // 结点是否加入哈夫曼树标志
    private HuffmanNode parent, lchild, rchild; // 父结点,左右孩子结点

    public HuffmanNode(){
        this(0);
    }

    // 构造一个具有权值的结点
    public HuffmanNode(int weight){
        this.weight = weight;
        flag = 0;
        parent = lchild = rchild = null;
    }

    public int getWeight() {
        return weight;
    }

    public void setWeight(int weight) {
        this.weight = weight;
    }

    public<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值