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】 树和二叉树、树和森林、哈夫曼树相关推荐

  1. 数据结构之树与二叉树的应用:哈夫曼树(最优二叉树)

    树与二叉树的应用:哈夫曼树 思维导图: 带权路径长度: 树的带权路径长度: 哈夫曼树的定义: 哈夫曼树的构造方法: 哈夫曼树的性质: 哈夫曼编码: 思维导图: 带权路径长度: 树的带权路径长度: 哈夫 ...

  2. 普通树与二叉树的相互转化及哈夫曼树的了解

    普通树与二叉树的相互转化及哈夫曼树的了解 二叉树与普通树的转化 二叉树的种种特性使得它更便于处理,如果能将普通树转化成二叉树就好了. 普通树 -> 二叉树 回忆孩子兄弟表示法,有第一孩子域(左孩 ...

  3. 【Java数据结构与算法】第十二章 哈夫曼树和哈夫曼编码

    第十二章 哈夫曼树和哈夫曼编码 文章目录 第十二章 哈夫曼树和哈夫曼编码 一.哈夫曼树 1.基本术语 2.构建思路 3.代码实现 三.哈夫曼编码 1.引入 2.介绍 3.代码实现哈夫曼编码综合案例 一 ...

  4. 数据结构c语言版胡学刚答案,哈夫曼树的建立与实现(最终版)最新版

    <哈夫曼树的建立与实现.doc>由会员分享,可免费在线阅读全文,更多与<哈夫曼树的建立与实现(最终版)>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索 ...

  5. 2020-10-1 //严蔚敏《数据结构》 //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码

    //严蔚敏<数据结构> //赫夫曼树及其应用:创建顺序赫夫曼树创建及得到赫夫曼编码 //(从叶子结点到根逆向求每个字符的赫夫曼编码)以及(无栈非递归遍历赫夫曼树,求赫夫曼编码) //自学中 ...

  6. 赫夫曼树介绍、赫夫曼树的性质、赫夫曼编码、赫夫曼树与赫夫曼编码的应用

    文章目录 赫夫曼树 1. 赫夫曼树介绍: 2. 赫夫曼树的创建过程: 3. 赫夫曼树的性质: 4. 赫夫曼编码: 5. 赫夫曼树与赫夫曼编码的c语言代码实现: 赫夫曼树 1. 赫夫曼树介绍: ​ 赫夫 ...

  7. huffman树_笃学不倦|c语言构造哈夫曼树哈夫曼编码

    艾薇巴蒂!许久不见甚是想念,想必这"涨姿势"的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码 构造哈夫曼树 首先,我们需要了解哈夫曼树是什么: 相关知 ...

  8. 字符串哈夫曼树C语言,C语言实现哈夫曼树的方法

    本文实例为大家分享了C语言实现哈夫曼树的具体代码,供大家参考,具体内容如下 准备工作: 1.定义一个结构体,表示一个节点.其中,这个结构体有4个成员变量,分别表示是这个节点的权值,父节点及左右子节点的 ...

  9. 《数据结构与算法》(十一)- 树、森林与二叉树的转换及哈夫曼树详解

    目录 前言 1. 树.森林与二叉树之间的转换 1.1 树转换为二叉树 1.2. 森林转换为二叉树 1.3. 二叉树转换为树 1.4 二叉树转换为森林 1.5 树与森林的遍历 2. 哈夫曼树及其应用 2 ...

  10. 课堂笔记:树、森林与二叉树的转换、哈夫曼树

    树.森林与二叉树的转换 树转换为二叉树: 1.兄弟加线: 2.保留双亲与第一孩子连线,删去与其他孩子的连线: 3.顺时针转动,使之层次分明. 树的前序遍历等价于二叉树的前序遍历,树的后序遍历等价于二叉 ...

最新文章

  1. 图像处理分类、一般流程与算法
  2. Supporting Python 3(支持python3)——常见的迁移问题
  3. python语言入门自学-如何系统地自学 Python?
  4. html5页面被键盘挡住,HTML5 虚拟键盘出现挡住输入框怎么办
  5. python中 普通方法_python中普通方法classmethod和staticmethod的区别与用法
  6. (转)Asp.Net生命周期系列一
  7. 20-Joint entity and relation extraction based on a hybrid neural network(LSTM-ED+CNN),考虑长距离的实体标签之间的关
  8. java mysql dump_Java 调用Mysql dump 备份数据库
  9. 漫画:996 的本质是什么?
  10. 树莓派安装Gqrx软件(Linux下SDR 软件无线电接收软件之一)
  11. HashMap底层特性全解析
  12. word中图片为嵌入式格式时显示不全_word插入图片嵌入式 word图片显示不全
  13. c语言正弦波程序_怎样很好的恢复一个正弦波信号
  14. 投资是一个非常专业的领域,亏钱容易赚钱难
  15. 常见的网络设备:集线器 hub、网桥、交换机 switch、路由器 router、网关 gateway
  16. 【JZOJ 4598】准备食物
  17. iOS小工具合集-(合一Kit)
  18. 【数据库】MySQL
  19. android代码实现手机加速功能,神奇的安卓手机提速方法 只需设置两步立即提速70%以上...
  20. html 如何播放提示音,html播放提示音

热门文章

  1. 向微信公众号添加Word文档、图片、压缩包
  2. tomcat项目部署到本地局域网访问
  3. “网络和拨号连接”图标丢失疑难解答
  4. python画图工具turtle、matplotlib学习
  5. 售前工程师炼成记--第一天
  6. vivoY73s和vivoY70s的区别 vivoY73s和vivoY70s哪个值得入手
  7. 区块链益智冒险游戏NFT游戏开发
  8. iphone发热测试软件,手机发烫像火炉——教你App电量测试定位方法
  9. 此工作站和主域间的信任关系失败
  10. 画好高中男生校服有哪些技巧?