【数据结构_Day05】 树和二叉树、树和森林、哈夫曼树
1.树
根节点:非空树中无前驱结点的结点
结点的度:结点拥有的子树数
树的度:树内各结点的度的最大值
森林不一定是树,树一定是森林
2.二叉树
二叉树和树是不一样的概念
二叉树严格区分左子树和右子树,只有是两个结点时才不会进行区分
例如三个结点的二叉树有五种形式
而三个结点的树有两种形式
① 二叉树的性质
■ 在二叉树的第i层至多有2^(i-1) (i>=1)
■ 深度为k的二叉树至多有2^k-1个结点(至少有k个结点)
■ 对任何一颗二叉树T,如果其叶子数为n0,度为2的结点数为n2,则n0=n2+1
特殊二叉树
满二叉树
完全二叉树:完全二叉树和满二叉树对应的编号一一对应
性质5:如果对一颗有n个结点的完全二叉树(深度为 以2为底n的对数取不大于它的最大整数,按层从左到右进行编号),则对应的每一个结点的左子树编号为2i,右子树为2i+1
② 二叉树的储存结构
二叉树的顺序存储结构
二叉树的链式存储结构
三叉链表:
③ 遍历二叉树和线索二叉树
遍历顺序(规定从左到右的三种形式)
DLR 根左右 先序遍历
LDR 左根右 中序遍历
LRD 左右根 后序遍历
二叉树的层次遍历 使用队列
④ 二叉树的应用
建立二叉树 递归
复制二叉树 递归
计算二叉树的深度 递归
3.线索二叉树
4.树和森林
①树的存储结构
双亲表示法 通过数组
孩子表示法 通过链表
孩子兄弟表示法(二叉树表示法、二叉链表表示法)
②树和二叉树的转换
树转化为二叉树:兄弟相连留长子
二叉树转为为树:
③森林和二叉树的转换
先将树转换为二叉树,然后在将其余的二叉树合成一个二叉树
④森林的遍历
森林的遍历分三个部分
5.哈夫曼树
■ 哈夫曼树(最优二叉树)
结点的路径长度:表示两个结点之间的路径长度
树的路径长度:从树根结点到每一个结点的路径长度之和
权:
结点的带权路径长度:从该结点到树根之间的路径长度与结点上权的乘积
树的带权路径长度:树中所有叶子结点的带权路径长度之和,WPL =
■ 贪心算法
哈夫曼算法
找两个权值最小的根,然后重复组合,最后形成新的二叉树
■ 哈夫曼编码
哈夫曼编码是最优前缀码
为什么哈夫曼编码能保证是前缀编码?
因为没有一片树叶是另一片树叶的祖先,所以每个叶结点的编码就不可能是其它叶结点编码的前缀
为什么哈夫曼编码能保证字符编码总长最短?
因为哈夫曼树的带权路径长度最短,故字符编码的总长最短
【数据结构_Day05】 树和二叉树、树和森林、哈夫曼树相关推荐
- 数据结构之树与二叉树的应用:哈夫曼树(最优二叉树)
树与二叉树的应用:哈夫曼树 思维导图: 带权路径长度: 树的带权路径长度: 哈夫曼树的定义: 哈夫曼树的构造方法: 哈夫曼树的性质: 哈夫曼编码: 思维导图: 带权路径长度: 树的带权路径长度: 哈夫 ...
- 普通树与二叉树的相互转化及哈夫曼树的了解
普通树与二叉树的相互转化及哈夫曼树的了解 二叉树与普通树的转化 二叉树的种种特性使得它更便于处理,如果能将普通树转化成二叉树就好了. 普通树 -> 二叉树 回忆孩子兄弟表示法,有第一孩子域(左孩 ...
- 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码
第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...
- 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版
<哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...
- 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码
//严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...
- 赫夫曼树介绍、赫夫曼树的性质、赫夫曼编码、赫夫曼树与赫夫曼编码的应用
文章目录 赫夫曼树 1. 赫夫曼树介绍: 2. 赫夫曼树的创建过程: 3. 赫夫曼树的性质: 4. 赫夫曼编码: 5. 赫夫曼树与赫夫曼编码的c语言代码实现: 赫夫曼树 1. 赫夫曼树介绍: 赫夫 ...
- huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码
艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...
- 字符串哈夫曼树C语言,C语言实现哈夫曼树的方法
本文实例为大家分享了C语言实现哈夫曼树的具体代码,供大家参考,具体内容如下 准备工作: 1.定义一个结构体,表示一个节点.其中,这个结构体有4个成员变量,分别表示是这个节点的权值,父节点及左右子节点的 ...
- 《数据结构与算法》(十一)- 树、森林与二叉树的转换及哈夫曼树详解
目录 前言 1. 树.森林与二叉树之间的转换 1.1 树转换为二叉树 1.2. 森林转换为二叉树 1.3. 二叉树转换为树 1.4 二叉树转换为森林 1.5 树与森林的遍历 2. 哈夫曼树及其应用 2 ...
- 课堂笔记:树、森林与二叉树的转换、哈夫曼树
树.森林与二叉树的转换 树转换为二叉树: 1.兄弟加线: 2.保留双亲与第一孩子连线,删去与其他孩子的连线: 3.顺时针转动,使之层次分明. 树的前序遍历等价于二叉树的前序遍历,树的后序遍历等价于二叉 ...
最新文章
- 图像处理分类、一般流程与算法
- Supporting Python 3(支持python3)——常见的迁移问题
- python语言入门自学-如何系统地自学 Python?
- html5页面被键盘挡住,HTML5 虚拟键盘出现挡住输入框怎么办
- python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法
- (转)Asp.Net生命周期系列一
- 20-Joint entity and relation extraction based on a hybrid neural network(LSTM-ED+CNN),考虑长距离的实体标签之间的关
- java mysql dump_Java 调用Mysql dump 备份数据库
- 漫画:996 的本质是什么?
- 树莓派安装Gqrx软件(Linux下SDR 软件无线电接收软件之一)
- HashMap底层特性全解析
- word中图片为嵌入式格式时显示不全_word插入图片嵌入式 word图片显示不全
- c语言正弦波程序_怎样很好的恢复一个正弦波信号
- 投资是一个非常专业的领域,亏钱容易赚钱难
- 常见的网络设备:集线器 hub、网桥、交换机 switch、路由器 router、网关 gateway
- 【JZOJ 4598】准备食物
- iOS小工具合集-(合一Kit)
- 【数据库】MySQL
- android代码实现手机加速功能,神奇的安卓手机提速方法 只需设置两步立即提速70%以上...
- html 如何播放提示音,html播放提示音