“树与二叉树”学习提纲
文章目录
- 前言
- 树的基本概念
- 树的关键概念
- 树的存储结构
- 树的常用性质
- 二叉树的概念
- 二叉树的基本形态
- 特殊的二叉树
- 二叉树的性质
- 二叉树的存储结构
- 二叉树的遍历和线索二叉树
- 二叉树的遍历方式
- 二叉树遍历的性质
- 二叉树遍历的应用
- 二叉树线索化的方式
- 二叉树、树和森林
- 树转换为二叉树的方式
- 二叉树转换为树的方式
- 森林转换为二叉树的方式
- 二叉树转换为森林的方式
- 树遍历的方式
- 森林的遍历方式
- 树与二叉树的应用
- 树与二叉树的应用
- 哈夫曼树的相关概念
- 并查集顺序存储的双亲表示法
- 总结
- 参考资料
- 作者的话
前言
“树与二叉树”学习提纲。
树的基本概念
树的关键概念
- 结点的度:分支数
- 树的度:各结点度的最大值
- 结点的层次:根结点为第1层,根结点的孩子结点为第2层,依次类推
- 结点的深度:从根结点到当前结点的层数
- 结点的高度:从当前结点到叶子结点的层数的最大值
- 树的深度/高度:各结点层次的最大值
- 结点间的路径:结点间的点数
- 结点间的路径长度:结点间的边数
- 树的路径长度:根结点到每个结点的路径长度的和
树的存储结构
顺序存储:
- 双亲表示法
双亲表示法
- 整型一维数组:下标为当前结点,值为当前结点的双亲
- 结构体一维数组:结点结构可灵活设计:当前结点,当前结点的双亲,当前结点的孩子,当前结点的兄弟等
链式存储:
- 多重链表表示法
- 孩子表示法(改进:双亲孩子表示法)
- 孩子兄弟表示法/二叉树表示法
多重链表表示法:
- 指针域数量=树的度。结点结构:数据域,孩子指针域
- 指针域数量=结点的度:结点结构:数据域,度域,孩子指针域
孩子表示法:
- 一维数组+单链表
- 一维数组,存储单链表的头指针。结点结构:数据域,头指针域
- 单链表,存储孩子结点。结点结构:数据域,孩子指针域
孩子兄弟表示法:
- 多重链表/二叉链表。结点结构:数据域,第一个孩子指针域,右兄弟指针域
树的常用性质
- 结点数-1=分支数/边=所有结点的度数和
二叉树的概念
二叉树的基本形态
- 空二叉树
- 只有一个根结点
- 根结点只有左子树
- 根结点只有右子树
- 根节点有左子树和右子树
特殊的二叉树
- 斜二叉树:左斜二叉树,右斜二叉树
- 满二叉树
- 完全二叉树
- 二叉排序/搜索树
- 平衡二叉树(AVL)
- 线索二叉树:前序线索二叉树,中序线索二叉树,后序线索二叉树
- 最优二叉树:带权路径长度最短
- 正则/严格二叉树:无度为1的结点
二叉树的性质
- 叶子结点数/度为0的结点数=度为2的结点数+1:n0=n2+1
- 第k(k>=1)层,该层最多有2的k-1次方个结点
- 深度/高度为h,该树(满二叉树)最多有2的h次方-1个结点。->结点数为n,满二叉树的深度/高度:[log以2为底的n]下取整+1或[log以2为底的(n+1)]上取整
- 完全二叉树依据从上到下,从左到右编号为1到n。当前结点的编号为i:
- 函数Catalan()/卡特兰数:结点数为n,能构成的不同二叉树数:[C右上n右下2×n]组合÷(n+1)
完全二叉树依据从上到下,从左到右编号为1到n。当前结点的编号为i:
- i=1,当前结点为根节点,无双亲结点
- i不等于或>1时,双亲结点的编号:[i÷2]下取整
- i不等于或>1时,若i为偶数,双亲结点的编号:i÷2,当前结点是双亲结点的左孩子
- i不等于或>1时,若i为奇数,双亲结点的编号:(i-1)÷2,当前结点是双亲结点的右孩子
- 2×i<=n时,当前结点有左孩子结点,左孩子结点的编号:2×i
- 2×i>n时,当前结点无左孩子结点
- 2×i+1<=n时,当前结点有右孩子结点,右孩子结点的编号:2×i+1
- 2×i+1>n时,当前结点无右孩子结点
- 当前结点的层次/深度:[log以2为底的i]下取整+1
- 树的深度/高度:[log以2为底的n]下取整+1或[log以2为底的(n+1)]上取整
- 最后一个非叶子结点的编号:[n/2]下取整
完全二叉树依据从上到下,从左到右编号为0到n。当前结点的编号为i:
- 双亲结点的编号:[i÷2]上取整-1
- 左孩子结点的编号:2×i+1
- 右孩子结点的编号:2×i+2
二叉树的存储结构
- 顺序存储:一维数组(依据完全二叉树)
- 链式存储:多重链表(灵活设计:二叉链表,三叉链表等)
重要性质:二叉链表的结点数为n,空指针域数:n+1
注意:树的顺序存储结构:数组下标反映结点的编号;二叉树的顺序存储结构依据完全二叉树编号、设计:数组下标反映结点的编号和结点间关系;
二叉树的遍历和线索二叉树
二叉树的遍历方式
深度优先遍历:
- 先序遍历(NLR)(递归法,迭代法)
- 中序遍历(LNR)(递归法,迭代法)
- 后序遍历(LRN)(递归法,迭代法)
广度优先遍历:
- 层次遍历(递归法,迭代法)
二叉树遍历的性质
- 已知二叉树的前序遍历序列和中序遍历序列,可以唯一确定一颗二叉树
- 已知二叉树的后序遍历序列和中序遍历序列,可以唯一确定一颗二叉树
- 已知二叉树的前序遍历序列和后序遍历序列,不可以唯一确定一颗二叉树,可以唯一确定结点的祖先和子孙关系
- 已知二叉树的中序遍历序列和层序遍历序列,可以唯一确定一颗二叉树
二叉树遍历的应用
- 查找
- 线索化二叉树
- 求深度/高度:前序遍历,后序遍历,层序遍历
- 表达式求值:后序遍历
- 求路径:后序遍历
- 交换左右子树:后序遍历
- 求宽度:层序遍历
- …
注意:一般求深度(从上到下)用前序遍历,求高度(从下到上)用后序遍历
二叉树线索化的方式
- 前序遍历
- 中序遍历
- 后序遍历
二叉树、树和森林
树转换为二叉树的方式
依据:孩子兄弟表示法
过程:
- 连接兄弟结点——兄弟表示
- 只保留每结点和第一个孩子结点的连接,断开和其他孩子结点的连接——孩子表示
- 调整层次结构(以根结点为轴心,顺时针旋转45°:孩子结点为左孩子,兄弟结点为右孩子)——二叉树层次结构表示
二叉树转换为树的方式
依据:孩子兄弟表示法
过程:
- 调整层次结构(以根结点为轴心,逆时针旋转45°:左孩子结点为第一个孩子,右孩子结点为其他孩子)——树层次结构表示
- 连接每结点和其他孩子结点(每结点的第一个孩子结点和其他孩子结点在同一层)——逆孩子表示
- 断开兄弟结点的连接——逆兄弟表示
森林转换为二叉树的方式
依据:孩子兄弟表示法
过程:
- 树转换为二叉树——孩子兄弟表示
- 连接树根结点(第二颗树根结点为第一颗树根结点的右孩子,第三颗树根结点为第二颗树根结点的右孩子,以此类推)——森林/多颗树->一颗二叉树
二叉树转换为森林的方式
依据:孩子兄弟表示法
过程:
- 断开树根结点和右孩子结点的连接——一颗二叉树->森林/多颗二叉树
- 二叉树转换为树——逆孩子兄弟表示
注意:
- 若二叉树根结点的右孩子不存在,转换为树;若存在,转换为森林
- 二叉树转换为的树和森林是唯一的,树和森林转换为的二叉树是不唯一的
树遍历的方式
- 先序遍历——与相应二叉树的先序遍历同
- 后序遍历——与相应二叉树的中序遍历同
- 层次遍历
森林的遍历方式
- 先序遍历——与相应二叉树的先序遍历同
- 中/后序遍历——与相应二叉树的中序遍历同
树与二叉树的应用
树与二叉树的应用
- 哈/赫夫曼树(Huffman)
- 并查集
哈夫曼树的相关概念
- 结点间的路径:结点间的点数
- 结点间的路径长度:结点间的边数
- 树的路径长度:根结点到每个结点的路径长度的和
- 结点的带权路径长度:结点的权值×结点到根结点的路径长度
- 树的带权路径长度(WPL):所有叶子结点的带权路径长度的和
- 哈夫曼树的构造
- 哈夫曼编码:最短前缀码
哈夫曼树的构造:
- n个原结点,n-1个新结点,共2n-1个结点
- 哈夫曼树可能不唯一,树的带权路径长度(WPL)唯一
注意:
- 存在哈夫曼多叉树
- 常称哈夫曼二叉树为哈夫曼树
- 哈夫曼二叉树是最优二叉树、正则/严格二叉树
并查集顺序存储的双亲表示法
- 一维数组
- 数组下标:结点名,唯一
- 数组值:结点的双亲结点名,不唯一,负数,绝对值为树中结点数
总结
“树与二叉树”学习提纲。
参考资料
- 《2023版数据结构高分笔记》主编:率辉
- 《2023年计算机组成原理考研复习指导》组编:王道论坛
- 《大话数据结构》作者:程杰
作者的话
- 感谢参考资料的作者/博主
- 作者:夜悊
- 版权所有,转载请注明出处,谢谢~
- 如果文章对你有帮助,请点个赞或加个粉丝吧,你的支持就是作者的动力~
- 文章在描述时有疑惑的地方,请留言,定会一一耐心讨论、解答
- 文章在认识上有错误的地方, 敬请批评指正
- 望读者们都能有所收获
“树与二叉树”学习提纲相关推荐
- 计算机二级二叉树基础知识,2017年计算机二级公共基础知识学习教程:树与二叉树...
(六)树与二叉树 1.树的基本概念 树是一种简单的非线性结构.在树结构中,数据元素之间有着明显的层次结构.在树的图形表示中,用直线连接两端的结点,上端点为前件,下端点为后件. 在树结构中,每一个结点只 ...
- 数据结构与算法学习笔记-树和二叉树
声明:本博客仅为本人学习途中做的笔记 采自青岛大学王卓老师的视频教学 主要内容为算法思路,具体代码实现还需修改后才能运行,望各位看官多多包涵,您的点赞与评论是对我最大的肯定! 1.树和二叉树的定义 数 ...
- 数据结构学习笔记(5.树与二叉树 6.图)
文章目录 第五章 树与二叉树 树 树的常考性质 二叉树--定义.基本术语 二叉树--常考性质 二叉树--存储结构 二叉树--先序.中序.后序遍历 二叉树--层序遍历 由遍历序列构造二叉树 线索二叉树- ...
- 树、二叉树、AVL树,B树基础学习
树.二叉树.AVL树,B树基础学习 一.树的基本概念 树是一种数据结构,它是由n(n>1)个有限节点组成的一个具有层次关系的集合. 树的基本概念 1.双亲:若有一个结点有子树,那么该结点就称为子 ...
- “查找”学习提纲(二)——树型查找和散列查找
文章目录 前言 代码模板 二叉排序/查找/搜索树查找 适用 性能 代码模板 折半查找和二叉排序树查找总结 平衡二叉(排序)树/AVL树 构造相应层数的树至少需要的结点数 平衡调整的过程 平衡调整的类型 ...
- 带父节点的平衡二叉树_学习数据结构--第四章:树与二叉树(平衡二叉树)
第四章:树与二叉树(平衡二叉树) 1.平衡二叉树 平衡二叉树:AVL,任意结点的平衡因子的绝对值不超过一. 平衡因子:左子树高度 - 右子树高度 如上图二叉树,是否是平衡二叉树? 可以把所有结点的平衡 ...
- 为了OFFER,继续深入学习树和二叉树
@Author:Runsen @Date:2020/9/10 现在大四基本是重刷数据结构和算法,因为笔试真的太重要了. Runsen又重温了争大佬专栏的队列,又巩固了下.而且Runsen发现留言区大佬 ...
- 数据结构学习笔记(树、二叉树)
树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点 ...
- 【算法学习4】树与二叉树基础
首先是部分树方面的概念 节点:节点包括一个数据元素及若干指向其他子树的分支. 叶节点:度为0的节点称为叶结点,叶结点也称为终端节点. 根节点:树的最顶端的节点称为根节点. 子节点:树中一个节点的子树的 ...
最新文章
- Raspberry Pi 3B 安装Miniconda
- 也说说TIME_WAIT状态
- api报错 javaee maven_maven test 换javaee6 无法加载spring的配置文件 ?报错-问答-阿里云开发者社区-阿里云...
- AC_Dream 1224 Robbers(贪心)
- 史上最全jdk版本新特性大全
- Linux常用指令---netstat(网络端口)
- HCIE-OSPFV3
- 陈纪修老师《数学分析》 第08章:反常积分 笔记
- 【LKJ】LKJ弧形限速小结
- 从零到一搭建Kconfig配置系统
- 录播服务器系统调试内容,高清录播服务器系统选择注意事项
- 图像处理公共数据库下载地址集锦
- 飞塔防火墙的配置与策略
- 痞子衡嵌入式:语音处理工具pzh-speech诞生记(6)- 文语合成实现(pyttsx3, eSpeak1.48.04)...
- 帝国根目录查阅 帝国CMS根目录一览表 ECMC根目录都是什么意思?
- UIPATH 收发Outlook邮件
- 列表2:查询复制函数实操
- 80c51单片机通用I/O口
- 解决Win10系统图标变白
- 磨砂服务器波特率修改,完整word版MOXA串口服务器设置步骤.doc