数据结构-树与二叉树-思维导图+小结
数据结构-树与二叉树-思维导图
- 1 数据结构-第五章-树与二叉树-思维导图
- 2 思维导图-补充
- 3 小结
- 3.1 知识点小结
- 3.2 习题小结
1 数据结构-第五章-树与二叉树-思维导图
数据结构-第五章-树与二叉树-思维导图缩略图展示如下图1所示:
图1
2 思维导图-补充
1、第五章中“并查集-基本操作”代码如下:
#define SIZE 13
int UFSets[SIZE]; //集合元素数组//初始化并查集
void Initial(int S[]){for(int i=0;i<SIZE;i++)S[il=-1;
}//Find"查"操作,找x所属集合(返回x所属根结点)
int Find(int S[],int x){while(S[x]>=0) //循环寻找x的根X=S[x];return x; //根的s[]小于0
}//Union"并"操作,将两个集合合并为一个
void Union(int S[],int Rootl,int Root2){//要求Root1与Root2是不同的集合if(Root1==Root2) return;//将根Root2连接到另一根Root1下面S[Root2]=Root1;
}
2、第五章中“并查集-Union优化”代码如下:
#define SIZE 13
int UFSets[SIZE]; //集合元素数组//初始化并查集
void Initial(int S[]){for(int i=0;i<SIZE;i++)S[il=-1;
}//Find"查"操作,找x所属集合(返回x所属根结点)
int Find(int S[],int x){while(S[x]>=0) //循环寻找x的根X=S[x];return x; //根的s[]小于0
}//Union"并"操作,小树合并到大树
void Union(int S[],int Rootl,int Root2){if(Rootl==Root2) return;if(S[Root2]>S[Root1]){ //Root2结点数更少S[Root1] += S[Root2]; //累加结点总数S[Root2] = Root1; //小树合并到大树} else {S[Root2] += S[Root1]; //累加结点总数S[Root1] = Root2; //小树合并到大树}
}
3、第五章中“并查集-Find优化(压缩路径)”代码如下:
#define SIZE 13
int UFSets[SIZE]; //集合元素数组//初始化并查集
void Initial(int S[]){for(int i=0;i<SIZE;i++)S[il=-1;
}//Find"查"操作优化,先找到根节点,再进行"压缩路径"
int Find(int S[],int x){int root = x;while(S[root]>=0) root=S[root]; //循环找到根while(x!=root){ //压缩路径int t=S[x]; //t指向x的父节点S[x]=root; //x直接挂到根节点下x=t;}return root; //返回根节点编号
}//Union"并"操作,小树合并到大树
void Union(int S[],int Rootl,int Root2){if(Rootl==Root2) return;if(S[Root2]>S[Root1]){ //Root2结点数更少S[Root1] += S[Root2]; //累加结点总数S[Root2] = Root1; //小树合并到大树} else {S[Root2] += S[Root1]; //累加结点总数S[Root1] = Root2; //小树合并到大树}
}
3 小结
3.1 知识点小结
1、树的性质:总结点数=总度数+1。
2、度为m的树、m叉树区别:
树的度------各结点的度的最大值;
m叉树------每个结点最多只能有m个孩子的树;
度为m的树 | m叉树 |
---|---|
任意结点的度≤m(最多m个孩子) | 任意结点的度≤m(最多m个孩子) |
度为m的树第i层至多有mi-1个结点(i≥1) | m叉树第i层至多有mi-1个结点(i≥1) |
至少有一个结点度=m(有m个孩子) | 允许所有结点的度都<m |
一定是非空树,至少m+1个结点 | 可以是空树 |
高度为h,度为m的树至少有h+m-1个结点 | 高度为h的m叉树至少有h个结点 |
3、高度为h的m叉树至多有mh−1m−1{ m^h-1 \over m-1}m−1mh−1个结点。
4、满二叉树是高度为h且含有2h-1个结点的二叉树。
5、完全二叉树中度为1的结点要么为0要么为1。
若完全二叉树有2k(偶数)个结点,则必有n1 = 1,n0 = k,n2 = k-1;
若完全二叉树有2k-1(奇数)个结点,则必有n1 = 0,n0 = k,n2 = k-1。
6、先序遍历、中序遍历、后序遍历利用栈进行实现,层次遍历利用队列进行实现。
7、前序序列、后序序列、层序序列的两两组合无法唯一确定一棵二叉树。
8、树和森林的遍历
树 | 森林 | 二叉树 |
---|---|---|
先根遍历 | 先序遍历 | 先序遍历 |
后根遍历 | 中序遍历 | 中序遍历 |
9、高度为h(h>0)的完全二叉树对应的森林所含的树的个数一般是h-1个,满二叉树对应的森林所含的树的个数是h个。
10、构造哈夫曼树过程中,共建了n-1个结点(双分支结点),因此哈夫曼树结点总数为2n-1;构造哈夫曼树过程中每次都选择2棵树作为新结点的孩子,因此不存在度为1的结点。
3.2 习题小结
以下题目均来自王道考研系列-《数据结构考研复习指导》。
1、一棵有n0个叶子结点的完全二叉树,最多有几个结点,最少有几个结点。
1、【解析】在完全二叉树中,度为1的结点n1有两种取值,即n1 = 0或n1 = 1。当n1=1时,结点数最多,即n0 + n1 + n2 = n0 + 1 + n0 - 1 = 2n0个结点;当n1 = 0时,结点数最少,即n0 + n1 + n2 = n0 + 0 + n0 - 1 = 2n0 - 1个结点;
2、若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是几个。
2、【解析】方法一:根据完全二叉树的性质:最后一个分支结点序号为⌊n/2⌋{\lfloor {n/2} \rfloor}⌊n/2⌋,那么⌊768/2⌋{\lfloor {768/2} \rfloor}⌊768/2⌋=384,也就是说前384个结点是非叶结点,那么剩下768-384=384个结点就是叶子结点。
方法二:在完全二叉树中,叶子结点个数比非叶子结点多一个或者二者相等,即n1 = 0时,叶结点个数 = 非叶子结点个数 + 1;n1 = 1时,叶结点个数 = 非叶子结点个数。总结点数 = n0 + n1 + n2 = n0 + n1 + n0 - 1 = 2n0 + n1 -1 = 768,即 2n0 + n1 = 769,又因为结点数必须是整数,所以n1在可取值范围内取1,把n1 = 1代入,即2n0 = 768,n0 = 384。
方法三:根据3.1小结中第5点。因为768是偶数,所以必有n1 = 1,n0 = 384,n2 = 383,故叶子结点为384个。
补充:对于满二叉树,叶结点个数 = 非叶子结点个数 + 1
3、一棵哈夫曼树共有215个结点,对其进行哈夫曼编码,共能得到多少个不同的码字。
3、【解析】哈夫曼树有多少叶子结点,就有多少个不同的码字。哈夫曼树中只有度为0和度为2的两种结点,即n0 + n2 = n0 + n0 - 1 = 2n0 - 1 = 215,n0 = 108。
4、若某二叉树有5个叶结点,其权值分别为10,12,16,21,30,则其最小的带权路径长度(WPL)是多少。
4、【解析】方法一:画出对应哈夫曼树后计算,如下图2所示:
图2
方法二:WPL=该树所有非叶子结点的权值之和,可以不画哈夫曼树,求出所有非叶结点的权值即可。即10 + 12 = 22,16 + 21 = 37,22 + 30 = 52,37 + 52 = 89,则WPL = 22 + 37 + 52 + 89 = 200。
数据结构-树与二叉树-思维导图+小结相关推荐
- 数据结构:树和二叉树 思维导图
- 数据结构.树的分类 思维导图
做一个关于树的目录: 慢慢补充好了..
- 数据结构-线性表-思维导图+小结
数据结构-线性表思维导图+小结 1 数据结构-第二章-线性表-思维导图 2 数据结构-第二章-线性表-习题小结 2.1 概念性习题小结 2.2 操作性习题小结 1 数据结构-第二章-线性表-思维导图 ...
- 项目管理树状组织结构思维导图怎样绘制
思维导图的种类是很多的,不同的主题要选择不同的框架结构以及绘制方法,这样有利于洪作的进行,并且熟练掌握不同结构思维导图的绘制可以对让我们在学到不同的知识点,下面是分享的项目管理树状组织结构思维导图的绘 ...
- 《数据结构与算法分析》 思维导图复习
博主复习时候自己总结的思维导图,仅供参考,希望对大家有点帮助吧. 图的清晰度是够的,网页上看不清可以保存到本地放大看. 1.绪论 2.线性表 3.栈 4.队列 5.数组 6.树和二叉树 7.图论 8. ...
- 1.4 计算机系统概述思维导图小结-常见问题和易混淆知识点(组成原理)
文章目录 1.计算机系统概述思维导图 2.常见问题及易混淆知识点 (1)主频高的CPU一定比主频低的CPU快吗?为什么? (2)不同级别的语言编写程序有什么区别?哪种语言编写的程序能被硬件直接执行? ...
- 数据结构——线性表知识思维导图
此博客主要是线性表部分的知识思维导图 便于对线性表这一章节的知识在脑中形成一个知识体系 具体重要代码实现可以点击
- 学习笔记 | 数据结构和算法 知识点思维导图
程序 = 数据结构 + 算法 一 数据结构知识点 01 队列和栈,需要了解它们的特点. 队列是先进先出,栈是后进先出. 02 表 表,包括很多种,有占用连续空间的数组.用指针链接的单向和双向链表,首尾 ...
- 200 计算机网络之物理层思维导图小结
最新文章
- RHEL5.5学习--安装vmtools
- ES5和ES6数组遍历方法详解
- 推理成本降低48倍!1张GPU就能让静态图像动起来 | 格拉兹科技大学Facebook
- [原创]Silverlight与PostgreSQL数据库的互操作(CURD完全解析)
- 进程互斥的要求与实现方法
- e语言html显示框,html marguee标签
- trim的返回值php,php trim()函数
- html邮件和纯文本邮件区别,邮件营销必读系列五--纯文本和HTML邮件类型——哪一种邮件类型更适合你?...
- 湖北大学计算机复试笔试题型,2016年湖北大学计算机与信息工程学院计算机组成原理复试笔试最后押题五套卷...
- redhat linux yum仓库,关于RHEL6发行版yum仓库的配置
- 数字ToString作为货币显示并且带小数
- php 邮件乱码,解决PHP mail发送UTF-8中文邮件乱码
- mysql root远程访问权限_解决Navicat连接MySQL数据库报错问题
- 很恶心的一个关于字符串的题目!
- 前端vue实现PDF预览
- python dask_使用Python并行框架Dask处理和分析大规模时空数据
- vue图片加载完成前增加loading效果
- java中根遍历后根遍历构造,恳求大佬指点!!!首先标明空子树的先根遍历序列建立一棵二叉树...
- OCRunner 第零篇:从零教你写一个 iOS 热修复框架
- HTML期末作业~个人信息展示网站响应式模板(HTML+CSS+JavaScript)
热门文章
- c1灯光语言,c1科目三路考灯光口诀
- android phone电脑驱动下载,全机型Android Phone驱动及安装教程(XP,Vista,Win7).pdf
- swi prolog 和java_制作适用于GNU和SWI的Prolog代码
- 因果分析系列1--入门
- Java函数式接口--抽象方法接口
- 魅族pro7plus android10,魅族PRO7和PRO7 Plus有什么区别?哪个好?一文秒懂
- 51Nod-1355-斐波那契的最小公倍数
- USBCNC ATC自动换刀教程
- 创业第一步做什么?——走出自己的“舒适区”
- 中国地名英译的几点注意事项