当Kotlin遇见数据结构丨哈夫曼树的实现

哈夫曼树定义

给定N个数值作为N个叶子结点的权值,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也叫哈夫曼树。

哈夫曼树是带权路径长度最小的树,权值越大的节点距离根节点越近。

带权路径:根结点到第L层结点路径的长度,长度为 L-1。
树的带权路径长度:树的所有叶子节点带权路径总和,简称 WPL(Weighted Path Length of Tree)。

当Kotlin遇见数据结构丨哈夫曼树的实现_第1张图片


Kotlin 中哈夫曼树如何实现

1. 实现的流程

1.1 将数组中所有元素创建为若干二叉树
1.2 排序
1.3 取出最小权值的两个二叉树 并 创建新的二叉树
1.4 把两个最小权值的子树从集合中移除 并 将新二叉树放入集合
1.5 循环处理 1.2 - 1.4,直到集合的 size = 1 时停止

2. 实现的代码

    /**
     * 将数组转换为赫夫曼树
     * */
    fun createHuffmanTree(arr:IntArray):Node{

        // 将数组中所有元素创建为若干二叉树
        var nodeList

你可能感兴趣的:(Kotlin,遇见数据结构)