MobMsg
【移动端】Android丨Kotlin丨Flutter丨Cordova 【前端】Vue丨Js丨Css丨Html 【后端】Java丨Kotlin丨Node 【各厂小程序】微信丨百度丨other...
展开
-
当Kotlin遇见数据结构丨认识 Kotlin 语言
Kotlin 的背景Kotlin 是一门基于 JVM 且与 JAVA 可 100% 互通的编程语言,用 JetBrains 的话来说 Kotlin 是更『现代化、更强大』的编程语言。Kotlin 由 JetBrains 在 2010 年开发,2011 年开源至 GitHub ,2016 年发布 1.0 版。 源码地址:https://github.com/JetBrains/kotli...原创 2019-10-07 11:39:07 · 1132 阅读 · 3 评论 -
当Kotlin遇见数据结构丨数据结构之树结构概述(含满二叉树、完全二叉树、平衡二叉树、二叉搜索树、红黑树、B-树、B+树、B*树)
1. 树结构示意图补充:兄弟节点:具有相同父节点的节点互称为兄弟节点。树的深度:从根节点开始(其深度为0)自顶向下逐层累加的。上图中,3的深度是1,6的深度是2,10的深度是3。节点高度:从叶子节点开始(其高度为0)自底向上逐层累加的。6的高度是1,根节点1的高度是3。2. 二叉树(Binary Tree)任何一个节点的子节点数量不超过2(子节点分为左节点与右节点)。2...原创 2019-10-07 11:43:27 · 940 阅读 · 0 评论 -
当Kotlin遇见数据结构丨实现链式存储的二叉树并遍历
本例中节点权结构图1. Kotlin 中二叉树的创建简单二叉树的创建分为三部分: 新建节点、新建树、给节点和树赋值并关联,下面进入编码阶段:1.1 新建节点 Bean:TreeNode.kt注意:在 Kotlin 中使用 data class 声明类时,可以直接创建一个包含 getters、 setters、 equals()、 hashCode()、 toString() 以及 co...原创 2019-10-07 11:46:12 · 903 阅读 · 0 评论 -
当Kotlin遇见数据结构丨实现链式存储的二叉树中查找节点
1. 查找方法链式存储的二叉树中查找节点的方法可分为三种:前序查找、中序查找、后序查找,下面使用 Kotlin 语言编码实现查找函数,已创建的树结构、节点权如下图所示:1.1 前序查找函数 /** * 前序查找 * */ fun frontSearch(index: Int):TreeNode?{ var node:TreeNode? =...原创 2019-10-07 11:48:16 · 847 阅读 · 0 评论 -
当Kotlin遇见数据结构丨实现链式存储的二叉树中删除子树(直接删除篇)
本例中树结构、节点权如下图所示删除节点、子树代码本例实现逻辑为直接删除节点及其子节点,未处理存在有左右子节点并需移动逻辑,故将标题命名为为直接删除篇存在左节点或者右节点,删除后需要对子节点移动将在善后删除篇中更新同时存在左右子节点,不能简单的删除,但是可以通过和后继节点交换后转换为前两种情况将在善后删除篇中更新 /** * 删除节点、子树 */...原创 2019-10-07 11:52:12 · 827 阅读 · 0 评论 -
当Kotlin遇见数据结构丨实现顺序存储的二叉树并遍历
本例中树结构、节点权如下图所示顺序存储是指将二叉树存储在一个数组中,通过存储元素的下标反映元素之间的父子关系。任何一个二叉树都可以转换为数组,同理,任何一个数组都可以转换为二叉树。顺序存储的二叉树通常只考虑完全二叉树(满二叉树其实也是一个完全二叉树)第N个元素的左子节点为:2*N+1第N个元素的右子节点为:2*N+1第N个元素的父节点为:(N-1)/ 2(整数相除得整数)1. ...原创 2019-10-07 11:53:41 · 850 阅读 · 0 评论 -
当Kotlin遇见数据结构丨实现中序线索化二叉树并遍历
线索二叉树n个节点的二叉树含有n+1个空指针域。利用这些空指针域,存放指向节点的在某种遍历次序下的前驱节点及后继节点的指针,这种附加的指针称为"线索",加上了线索的二叉树就是"线索二叉树"。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。线索化二叉树的本质是将一个复杂的非线性结构转换为线性结构,使每一个节点都有了唯一的前驱节点和后续节点(第一个节点无前...原创 2019-10-07 11:55:14 · 816 阅读 · 0 评论 -
当Kotlin遇见数据结构丨哈夫曼编码
哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中对字符串进行哈夫...原创 2019-10-08 08:50:40 · 843 阅读 · 0 评论 -
当Kotlin遇见数据结构丨哈夫曼解码
哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中对字符串进行哈夫...原创 2019-10-08 08:42:39 · 831 阅读 · 0 评论 -
当Kotlin遇见数据结构丨哈夫曼树的实现
哈夫曼树定义给定N个数值作为N个叶子结点的权值,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也叫哈夫曼树。哈夫曼树是带权路径长度最小的树,权值越大的节点距离根节点越近。带权路径:根结点到第L层结点路径的长度,长度为 L-1。树的带权路径长度:树的所有叶子节点带权路径总和,简称 WPL(Weighted Path Length of Tree)。Kotli...原创 2019-10-08 08:41:13 · 815 阅读 · 0 评论 -
当Kotlin遇见数据结构丨使用哈夫曼编码压缩文件
哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中如何实现哈夫曼压...原创 2019-10-08 08:44:12 · 867 阅读 · 0 评论 -
当Kotlin遇见数据结构丨使用哈夫曼编码解压文件
哈夫曼编码定义哈夫曼编码是一种编码格式,属于可变字长编码的一种,该方法依照字符出现的概率来构建异字头的平均长度最短的码字,最终实现根据使用频率来最大化节省码字(字符)的存储空间和提高传输效率的目的,在数据压缩和通讯领域应用的非常广泛。哈夫曼编码的码字是异前置码字,任一码字不会是另一码字的前面部分,这样各种码字可以连在一起传输,中间无需空格分离但又不会混淆。Kotlin 中如何实现哈夫曼解...原创 2019-10-08 08:46:44 · 815 阅读 · 0 评论