数据结构——树、二叉树、森林、哈夫曼树、字符串模式匹配
%%%%%%
字符串模式匹配算法--详解KMP算法
https://blog.csdn.net/zc474235918/article/details/40474525
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html
%%%%%%
树的定义和基本术语
其实是一个递归的定义。每个有限集也是一个树。
树的抽象数据类型ADT
数据对象D:具有相同特征的数据元素的集合
数据关系R:
其他表示方法:
集合的圆圈方法、层次的目录
二叉树
左右之分。有序树。
完全二叉树 节点数为10 的话,必须连续的1-10,中间不能断。
性质4中log为向下取整。
顺序结构:对满二叉树比较好。 非完全二叉树,没有元素就为空。空间浪费。
链域:就是地址
空链域就是没有孩子的地址。
n个节点有2n个链域。 有n-1个分支,每个分支就是一个地址,就是一个链域。2n-(n-1)=n+1个空链域。
遍历二叉树
先序就是先根。
遍历都是递归的思想。
上面:
函数指针作为函数参数传递:https://www.cnblogs.com/jainszhang/p/10704514.html
二叉链表的存储形式
栈的数据结构实现中序遍历:
和下面先序只是访问元素的时机不同。其他都相同。VIsit函数位置不同。
先序是入栈的时候就访问根节点。 中序是出栈的时候才访问节点。
线索二叉树
二叉树为非线性结构 用一种方法 让它线性化
线性序列 按照某一种遍历的方法 排列成一个顺序。
n个节点,肯定有n-1个分叉,有n-1个节点有唯一双亲,1个根节点没有双亲。
有2n个链域,所以2n-(n-1)个空链域。所以有n+1个空链域。
a + b * - - - - e / f
线索化的目的是给空的链域 变为 非空。 可以通过中序、先序等方法来实现线索化。
层次遍历:
树和森林
数组下标为双亲的位置。
数组存放data和右边一个指针域,为一个单链表,下标指向孩子的位置
孩子双亲表示法:
左边为双亲位置,右边为孩子位置,感觉这个图和上面二叉树的图不对应。
孩子兄弟表示法:
森林和二叉树的对应关系:
树和森林的遍历
下面一个例题很不错:
哈夫曼树以及其应用
注意:叶子节点是最外面的节点,度为0。
中间的叫分支节点。
权值作为叶子节点构造哈夫曼树。
简单的说就是不断找当前最小权值的两个树。
n个叶子节点。剩下节点为n-1个。共有2n-1个节点。为严格二叉树。
哈夫曼编码:左孩子为0,右边为1
数据结构——树、二叉树、森林、哈夫曼树、字符串模式匹配相关推荐
- 【数据结构Note5】- 树和二叉树(知识点超细大全-涵盖常见算法 排序二叉树 线索二叉树 平衡二叉树 哈夫曼树)
文章目录 5.1 树和二叉树引入 5.1.1 树的概念 5.1.2 树的表示 5.1.3 树中基本术语 5.2 二叉树 5.2.1 概念 5.2.2 二叉树的性质 5.2.3 特殊的二叉树 5.2.4 ...
- 最优二叉树(哈夫曼树)知识点
路径:在一棵树中从一个结点往下到孩子或孙子结点之间的通路 结点的路径长度:从根节点到该节点的路径上分支的数目 树的路径长度:树中每个结点的路径长度之和 结点的权:给树中的结点赋予一个某种含义的值,则该 ...
- Java数据结构和算法:哈夫曼树
本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙,选择其中之一进行了解即可.若 ...
- 由二叉树构造赫夫曼树
赫夫曼树: 假设有n个权值{w1,w2,w3....},试构造一棵具有 n个叶子节点的二叉树,每个叶子节点带权为wi,则其中 带权路径长度最小的二叉树称为最优二叉树或者叫赫夫曼树. 构造赫夫曼树: 假 ...
- 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)
数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...
- java 实现最优二叉树_哈夫曼树(最优二叉树)及其Java实现
一.定义 一些定义: 节点之间的路径长度:在树中从一个结点到另一个结点所经历的分支,构成了这两个结点间的路径上的经过的分支数称为它的路径长度 树的路径长度:从树的根节点到树中每一结点的路径长度之和.在 ...
- 最优二叉树(哈夫曼树)Java实现
此篇博客讲最优二叉树也叫哈夫曼树的原理,以及构建步骤,还有哈夫曼编码原理.建议有二叉树基础朋友学习交流.对二叉树基础可以看我的另外一篇博客二叉树的构建以及遍历 文章目录 哈夫曼树引出: 哈夫曼树原理及 ...
- 【数据结构与算法】-哈夫曼树(Huffman Tree)与哈夫曼编码
超详细讲解哈夫曼树(Huffman Tree)以及哈夫曼编码的构造原理.方法,并用代码实现. 1哈夫曼树基本概念 路径:从树中一个结点到另一个结点之间的分支构成这两个结点间的路径. 结点的路径长度:两 ...
- 深入学习二叉树(三) 霍夫曼树
深入学习二叉树(三) 霍夫曼树 1 前言 霍夫曼树是二叉树的一种特殊形式,又称为最优二叉树,其主要作用在于数据压缩和编码长度的优化. 2 重要概念 2.1 路径和路径长度 在一棵树中,从一个结点往下可 ...
- 《数据结构与算法之哈夫曼树(Java实现)》
说在前头: 本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,能力有限,文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...
最新文章
- string :操作总结
- Windows 上搭建FTP服务器
- 7-19上午刷题未知点集合
- SharePoint 2010 - 如何导入\导出WebPart
- 数据库_初学语句 in的用法
- 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单
- VB控件注册 - 利用资源文件将dll、ocx打包进exe文件
- mysql 存储过程 风险_删除/恢复SQL server危险的存储过程方法
- Javascript高级程序设计——函数声明与函数表达式的区别
- Java、JSP宾馆入住管理系统的设计与实现
- 手机电视标准对峙激化
- java工具类_16 个超级实用的 Java 工具类
- 如何将已有图片做成透明水印_如何给图片制作透明水印
- vue、vant上传附件功能实现
- “腾讯再有本事,也要出海讨生活”
- xkcd目录_使用随机XKCD漫画作为您的桌面墙纸
- 1_01_GLib库入门与实践_GLib库简介
- 有些人 总是莫名其妙的得罪了
- 计算机协会素拓小游戏,计算机协会素质拓展策划书 (2)
- oracle field怎么翻译,field是什么意思_field的翻译_音标_读音_用法_例句_爱词霸在线词典...