第6章B--数据结构课件(吴伟民-严蔚敏编著)
《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明
《数据结构-C语⾔版》(严蔚敏,吴伟民版)课本源码+习题集解析使⽤说明《数据结构-C语⾔版》(严蔚敏,吴伟民版)课本源码+习题集解析使⽤说明先附上⽂档归类⽬录:课本源码合辑链接☛☛☛习题集全解析链接☛☛☛★教材及习题源码下载★链接☛☛☛(GitHub仓库)欢迎Star项⽬,如有疑问,请在Issues反馈。
博主有话说:01.⾃学编程,难免思路阻塞,故我在本博客陆续更新了严蔚敏,吴伟民版《数据结构-C语⾔版》各章节的课本源码和配套习题集答案解析,⽬的是为了整理数据结构中的知识点,并与⽹友交流意见,集思⼴益,共同进步。
(⽬前已更新完毕,细节待完善)★注★左侧随笔分类下⽤两个栏⽬:<课本源码>、<习题解析>来存放本主题⽂档。
<课本源码>⽬录下实现了三种数据结构源码:⼀:课本中重点描述过的数据结构与算法;⼆:课本中提到,但没有详细描述的数据结构;三:课本中未提到,但在习题集中涉及到的数据结构。
<习题解析>⽬录下存放了配套习题集中每章的习题解答,但对于算法设计题,要注意其相对路径,因为涉及到了别的⽂档的引⽤。
各⽂档的组织⽅式参见附录⼆中的图⽰,有疑问联系博主。
02.本源码与解析涵盖了《数据结构》课本和习题集两部分,课本和习题集分别以下图书籍为参照(我有左边的纸质版和右边的电⼦版,貌似内容没区别):03.所有源码实现均使⽤C语⾔,遵循C99标准,使⽤C-Free 5(C-Free置gcc编译器,编译时,需要在菜单栏,定位到构建-->构建选项-->类别-->C Language,勾选第三个:"ISO C99 plus GNU extensions [-std=gnu99]",即编译选项⽤-std=gnu99,⽽不是-std=c89或者-std=c99)测试通过(不要在CFree⾥创建⼯程,如果确实想在⼯程⾥运⾏,那⽂件互相引⽤的⽅式需要改写)。
清华大学严蔚敏数据结构ppt课件
数据结构的形式定义为:数据结构是一个二元 组:
Data-Structure=(D,S)
其中:D是数据元素的有限集,S是D上关系的 有限集。
例 复数的数据结构定义如下:
Complex=(C,R)
其中:C是含两个实数的集合﹛C1,C2﹜,分 别表示复数的实部和虚部。R={P},P是定义在 集合上的一种关系{〈C1,C2〉}。
当n取得很大时,指数时间算法和多项 式时间算法在所需时间上非常悬殊。因
此,只要有人能将现有指数时间算法中
的任何一个算法化简为多项式时间算法, 那就取得了一个伟大的成就。
有的情况下,算法中基本操作重复执行的次数 还随问题的输入数据集不同而不同。例如:
Void bubble-sort(int a[],int n)
(1)有穷性 一个算法必须总是在执行有穷步 之后结束,且每一步都在有穷时间内完成。
(2)确定性 算法中每一条指令必须有确切的 含义。不存在二义性。且算法只有一个入口和 一个出口。
(3)可行性 一个算法是可行的。即算法描述 的操作都是可以通过已经实现的基本运算执行 有限次来实现的。
4)输入 一个算法有零个或多个输入,这些输 入取自于某个特定的对象集合。
对一个算法要作出全面的分析可分成两用人 才个阶段进行,即事先分析和事后测试
事先分析 求出该算法的一个时间界限函数
事后测试 收集此算法的执行时间和实际占用 空间的统计资料。
定义:如果存在两个正常数c和n0,对于所有的 n≧n0,有︱f(n) ︳≦c|g(n) ︳
则记作 f(n)=O(g(n))
姓名 王小林 陈红 刘建平 张立立 ……..
学号 790631 790632 790633 790634 ……..
数据结构严蔚敏第6章
整理ppt
2
线性表
A.线性结构 栈
队
数
1.数据的逻辑结构
据 结
树形结构 B.非线性结构
构
的
图形结构
三
个 主
2、数据的存储结构 A 顺序存储
要 问
B 链式存储
题
3、数据的运算:检索、排序、插入、删除、修改等。
整理ppt
3
树形结构
全校学生档案管理的组织方式
整理ppt
4
A
D
B
C
E F GH
A
B
C
D
E
11
插入类:
InitTree(&T) // 初始化置空树
CreateTree(&T, definition) // 按定义构造树
Assign(T, cur_e, value) // 给当前结点赋值
InsertChild(&T, &p, i, c)
// 将以c为根的树插入为结点p的第i棵子树
整理ppt
证明:
设 二叉树上结点总数 n = n0 + n1 + n2
又 二叉树上分支总数 b = n1+2n2
而 b = n-1 = n0 + n1 + n2 - 1
由此, n0 = n2 + 1 。整理ppt
30
两类特殊的二叉树: 1
满二叉树:指的是
2
3
深度为k且含有2k-1个 4 5 6 7
结点的二叉树。
} TriTNode, *TriTree;
结点结构: parent lchild data rchild
整理ppt
41
数据结构 严蔚敏 课件第 章
34 12.07.2020
顶点的结点结构 data firstarc
typedef struct VNode { VertexType data; // 顶点信息 ArcNode *firstarc;
// 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM];
2. 如果每次让三条路同时通行,那么从图看出哪些路可以同时通行? 同时可通行的路为: (AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)
2 12.07.2020
【学习目标】
1.领会图的类型定义。 2.熟悉图的各种存储结构及其构造算法, 了解各种存储结构的特点及其选用原则。 3.熟练掌握图的两种遍历算法。 4.理解各种图的应用问题的算法。
3 12.07.2020
【重点和难点】
图的应用极为广泛,而且图的各种应用问题的 算法都比较经典,因此本章重点在于理解各种图的 算法及其应用场合。
【知识点】
图的类型定义、图的存储表示、图的深度优先搜 索遍历和图的广度优先搜索遍历、无向网的最小生成 树、最短路径、拓扑排序、关键路径。
4 12.07.2020
和顶点v 关联的边的数目定义为顶点v的度。
例如:
B
C
ID(B) = 3 ID(A) = 2
12.07.2020
A F
13
D E
对有向图来说,
A
B
E
CF 例如:
OD(B) = 1
顶点的出度: 以顶点v 为弧尾的弧的数目;
顶点的入度: 以顶点v 为弧头的弧的数目。
ID(B) = 2
TD(B) = 3
12.07.2020
数据结构严蔚敏PPT(完整版)
算法具有以下五个特性
① 有穷性: 一个算法必须总是在执行有穷步之后结 束,且每一步都在有穷时间内完成。
② 确定性:算法中每一条指令必须有确切的含义。 不存在二义性。且算法只有一个入口和一个出口。
图状结构
一般线性表 栈和队列 串 数组 广义表 一般树 二叉树 有向图 无向图
图1-5 数据逻辑结构层次关系图
1.1.5 数据类型
数据类型(Data Type):指的是一个值的集合和定 义在该值集上的一组操作的总称。
数据类型是和数据结构密切相关的一个概念。 在C 语言中数据类型有:基本类型和构造类型。
问题:必须先运行依据算法编制的程序;依赖软硬 件环境,容易掩盖算法本身的优劣;没有实际价值。 事前分析:求出该算法的一个时间界限函数。
与此相关的因素有: – 依据算法选用何种策略; – 问题的规模; – 程序设计的语言; – 编译程序所产生的机器代码的质量; – 机器执行指令的速度; 撇开软硬件等有关部门因素,可以认为一个特定算
K={k1, k2, …, k9} R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>, <k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6> } 画出这逻辑结构的图示,并确定那些是起点,那些是终点
数据元素之间的关系可以是元素之间代表某种含义 的自然关系,也可以是为处理问题方便而人为定义的 关系,这种自然或人为定义的 “关系”称为数据元素 之间的逻辑关系,相应的结构称为逻辑结构。
最新2019-清华大学严蔚敏数据结构ppt课件-PPT课件
数据对象可以是有限的,也可以是无限的。 数据结构不同于数据类型,也不同于数据对 象,它不仅要描述数据类型的数据对象,而且 要描述数据对象各元素之间的相互关系。 抽象数据类型:一个数学模型以及定义在该模 型上的一组操作。 抽象数据类型实际上就是对该数据结构的 定义。因为它定义了一个数据的逻辑结构以及 在此结构上的一组算法。 用三元组描述如下: (D,S,P)
ห้องสมุดไป่ตู้
数据类型:在一种程序设计语言中,变量所具 有的数据种类。 例1、 在FORTRAN语言中,变量的数据类型 有整型、实型、和复数型 例2、在C语言中 数据类型:基本类型和构造类型 基本类型:整型、浮点型、字符型 构造类型:数组、结构、联合、指针、枚举型、 自定义 数据对象:某种数据类型元素的集合。 例3、整数的数据对象是{…-3,-2,-1,0,1, 2,3,…} 英文字符类型的数据对象是{A,B,C,D,E,
数据结构的形式定义为:数据结构是一个二元 组: Data-Structure=(D,S) 其中:D是数据元素的有限集,S是D上关系的 有限集。 例 复数的数据结构定义如下: Complex=(C,R) 其中:C是含两个实数的集合﹛C1,C2﹜,分 别表示复数的实部和虚部。R={P},P是定义在 集合上的一种关系{〈C1,C2〉}。 数据结构在计算机中的表示称为数据的物理结 构,又称为存储结构。
1.3 抽象数据类型的表示和实现
P11
1.4 算法和算法分析 算法:是对特定问题求解步骤的一种描述 算法是指令的有限序列,其中每一条指令 表示一个或多个操作。 算法具有以下五个特性: (1)有穷性 一个算法必须总是在执行有穷步 之后结束,且每一步都在有穷时间内完成。 (2)确定性 算法中每一条指令必须有确切的 含义。不存在二义性。且算法只有一个入口和 一个出口。 (3)可行性 一个算法是可行的。即算法描述 的操作都是可以通过已经实现的基本运算执行 有限次来实现的。
数据结构严蔚敏ppt课件
数据结构严蔚敏ppt课件数据结构(严蔚敏)版●资料上传者:安徽大学研究生●资料使用范围:各大学考研及本科教学●欢迎报考安徽大学研究生●“星光考研书屋”祝您学习愉快[学习目标]掌握线性表的顺序存储结构和抽象数据类型中定义的每一种操作的含义,在顺序存储方式下每一种操作的具体实现和相应的时间复杂度;掌握链接存储的概念,线性表的单、双链接存储结构,对它们进行插入和删除结点的方法,循环单、双链表和带表头附加结点的单、双链表的结构和操作特点;掌握每一种线性表操作在由动态结点构成的单链表上具体实现的算法以及相应的时间复杂度。
2第2章线性表线性结构是最常用、最简单的一种数据结构。
而线性表是一种典型的线性结构。
其基本特点是线性表中的数据元素是有序且是有限的。
在这种结构中:① 存在一个唯一的被称为“第一个”的数据元素;② 存在一个唯一的被称为“最后一个”的数据元素;③ 除第一个元素外,每个元素均有唯一一个直接前驱;④ 除最后一个元素外,每个元素均有唯一一个直接后继。
32.1 线性表的逻辑结构线性表(Linear List ) :是由n(n ≧0)个数据元素(结点)a 1,a 2,…a n 组成的有限序列。
该序列中的所有结点具有相同的数据类型。
其中数据元素的个数n 称为线性表的长度。
当n=0时,称为空表。
当n>0时,将非空的线性表记作: (a 1,a 2,…a n ) a 1称为线性表的第一个(首)结点,a n 称为线性表的最后一个(尾)结点。
2.1.1 线性表的定义4a1,a2,…a i-1都是a i(2≦i≦n)的前驱,其中a i-1是a i的直接前驱;a i+1,a i+2,…a n都是a i(1≦i ≦n-1)的后继,其中a i+1是a i 的直接后继。
2.1.2线性表的逻辑结构线性表中的数据元素a i所代表的具体含义随具体应用的不同而不同,在线性表的定义中,只不过是一个抽象的表示符号。
◆线性表中的结点可以是单值元素(每个元素只有一个数据项) 。
数据结构严蔚敏PPT(完整版)
时间复杂度是衡量算法效率的重要指标,常见的 排序算法的时间复杂度有O(n^2)、O(nlogn)、 O(n)等。
查找的基本概念和算法
查找的基本概念
查找是指在一个已经有序或部分 有序的数据集合中,找到一个特 定的元素或一组元素的过程。
常见查找算法
常见的查找算法包括顺序查找 、二分查找、哈希查找等。
先进先出(FIFO)的数据 处理。
并行计算中的任务调度。
打印机的打印任务管理。
二叉树的层序遍历(宽度 优先搜索,BFS)。
04
树和图
树的基本概念和性质
树的基本概念
树是一种非线性数据结构,由节 点和边组成,其中节点表示实体 ,边表示实体之间的关系。
树的性质
树具有层次结构,节点按照层次 进行排列,每个节点最多只能有 一个父节点,除了根节点外。
isEmpty:判断队列是否为空。
enqueue:向队尾添加一个元素。
front 或 peek:查看队首元素。
dequeue:删除队首的元素。
栈和队列的应用
栈的应用 后进先出(LIFO)的数据处理。
括号匹配问题。
栈和队列的应用
队列的应用
深度优先搜索(DFS)。 表达式求值。
01
03 02
栈和队列的应用
数据结构严蔚敏ppt( 完整版)
contents
目录
• 绪论 • 线性表 • 栈和队列 • 树和图 • 排序和查找 • 数据结构的应用案例分析
01
绪论
数据结构的基本概念
总结词
数据结构是计算机存储和组织数据的方式,是算法和数据操 作的基础。
详细描述
数据结构是计算机科学中研究数据的组织和存储方式的学科 ,它决定了数据在计算机中的表示和关系。数据结构不仅包 括数据的逻辑结构,还涉及到数据的物理存储方式以及数据 的操作方式。
数据结构清华大学出版社严蔚敏吴伟民编著
第一章绪论1、数据结构是计算机中存储、组织数据的方式。
精心选择的数据结构可以带来最优效率的算法。
2、程序设计= 算法+数据结构3、解决问题方法的效率:●跟数据的组织方式有关●跟空间的利用效率有关●跟算法的巧妙程度有关4、数据:所有能输入到计算机中,且被计算机处理的符号的集合,是计算机操作对象的总称;是计算机处理的信息的某种特定的符号表示形式。
5、数据元素:数据中的一个“个体”,数据结构中讨论的基本单位。
相当于“记录”,在计算机程序中通常作为一个整体考虑和处理。
6、数据项: 相当于记录的“域”, 是数据的不可分割的最小单位,如学号。
数据元素是数据项的集合。
7、数据对象:性质相同的数据元素的集合.例如: 所有运动员的记录集合8、数据结构:是相互间存在某种关系的数据元素集合。
9、数据结构是带结构的数据元素的集合。
10、不同的关系构成不同的结构。
11、次序关系:{<ai,ai+1>|i=1,2,3,4,5,6}12、对每种数据结构,主要讨论如下两方面的问题:1)数据的逻辑结构,数据结构的基本操作;2)数据的存储结构,数据结构基本操作的实现;13、数据的逻辑结构:数据之间的结构关系,是具体关系的抽象。
数据结构的基本操作:指对数据结构的加工处理。
14、数据的存储结构(物理结构):数据结构在计算机内存中的表示。
数据结构基本操作的实现:基本操作在计算机上的实现(方法)。
15、数据结构的有关概念16、数据元素的4类的基本结构:○1集合;○2线性结构:结构中数据元素之间存在一对一的关系;○3树形结构:结构中数据元素之间存在一对多的关系;○4图状结构或网状结构:结构中数据元素之间存在多对多的关系。
17、C语言的优点:C语言可以直接操作内存。
18、每个节点都由两部分组成:数据域和指针域。
19、链接存储结构特点:●比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成)。
●逻辑上相邻的节点物理上不必相邻。
数据结构-清华大学严蔚敏PPT
④ 输入: 一个算法有零个或多个输入,这些输入 取自于某个特定的对象集合。
⑤ 输出: 一个算法有一个或多个输出,这些输出 是同输入有着某些特定关系的量。
一个算法可以用多种方法描述,主要有:使用自 然语言描述;使用形式语言描述;使用计算机程序设计 语言描述。
初始化赋值查找修改插入删除求长度等初始化赋值查找修改插入删除求长度等以下将对几种主要的操作进行讨论以下将对几种主要的操作进行讨论statusinitsqlistsqliststatusinitsqlistsqlistlelemarrayelemtypelelemarrayelemtypemallocmaxsizesizeofelemtypemallocmaxsizesizeofelemtypereturnerrorreturnerrorreturnokreturnok在线性表在线性表i1i1i1i1个位置上插入一个新结点个位置上插入一个新结点使其成使其成为线性表为线性表i1i1i1i1将线性表将线性表个结点后移一个位个结点后移一个位将结点将结点插入到结点插入到结点i1i1之后之后线性表长度加线性表长度加算法描述算法描述statusinsertsqlistsqliststatusinsertsqlistsqlistelemtypeelemtypei0illength1returnerrori0illength1returnerror线性表溢出线性表溢出returnerrorlelemarrayj1lelemarrayj
算法与数据结构
教材:《数据结构 (C 语言版 ) 》。严蔚敏,吴伟民
编
著。清华大学出版社。
参考文献:
1 《数据结构》 。张选平,雷咏梅 编, 严蔚敏 审。 机械工业出版社。
(2024年)数据结构严蔚敏PPT完整版
选择排序的基本思想
在未排序序列中找到最小(或最大)元素,存放到排序 序列的起始位置,然后,再从剩余未排序元素中继续寻 找最小(或最大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。
2024/3/26
33
交换排序和归并排序
交换排序的基本思想
通过不断地交换相邻的两个元素(如果它们的顺序错 误)来把最小的元素“浮”到数列的一端。具体实现 时,从第一个元素开始,比较相邻的两个元素,如果 前一个比后一个大,则交换它们的位置;每一对相邻 元素做同样的工作,从开始第一对到结尾的最后一对 ;这步做完后,最后的元素会是最大的数;针对所有 的元素重复以上的步骤,除了最后一个;持续每次对 越来越少的元素重复上面的步骤,直到没有任何一对 数字需要比较。
图的基本操作
创建图、添加顶点、添加边、删除顶点、删除边 等
2024/3/26
27
图的存储结构
01
邻接矩阵表示法
用一个二维数组表示图中顶点间的 关系,适用于稠密图
十字链表表示法
用于有向图,可以方便地找到任一 顶点的入边和出边
03
2024/3/26
02
邻接表表示法
用链表表示图中顶点间的关系,适 用于稀疏图
入栈操作将元素添加到栈顶,出栈操作将栈顶元素删 除,取栈顶元素操作返回栈顶元素但不删除,判断栈
是否为空操作检查栈中是否有元素。
2024/3/26
12
栈的表示和实现
栈可以用数组或链表来实现。
用数组实现时,需要预先分配一块连续的内存空间,用一个变量指示栈顶位置。入栈和出栈操作都可以 通过移动栈顶位置来实现。
22
二叉树的定义和基本操作
二叉树的定义
二叉树是一种特殊的树,每个节点最 多有两个子节点,分别称为左子节点 和右子节点。
《数据结构严蔚敏》课件
哈希查找
哈希查找利用哈希函数将关 键字映射为存储位置进行查 找。
排序算法
排序算法用于对数据进行升序或降序排列。源自冒泡排序、快速排序和堆排序
冒泡排序通过相邻元素交换进行排序,快速排 序使用分治思想,堆排序利用堆的性质进行排 序。
高级数据结构
B-树和B+树
B-树和B+树是一种多路搜索树,用于处理大量数据。
算法性能的重要指标。
稳定排序算法会保持相同元素的相对位
置不变。
3
贪心算法、动态规划算法等
贪心算法和动态规划算法是解决优化问 题的常用方法。
图的遍历算法
图的遍历有广度优先搜索和深度优先搜索两种 常用算法。
图的存储结构
图的存储结构包括邻接矩阵和邻接表等多种方 式。
最短路径算法
最短路径算法用于求解图中两个顶点之间的最 短路径。
查找与排序
查找算法
查找算法用于在数据结构中 查找指定元素的位置。
顺序查找和二分查找
顺序查找是逐个比较查找, 二分查找利用有序性进行折 半查找。
树结构
1
树的定义
树是一种非线性结构,具有层次关系的
二叉树
2
数据结构。
二叉树是一种特殊的树结构,每个节点
最多有两个子节点。
3
遍历算法
二叉树的遍历有前序、中序和后序三种
线索二叉树
4
常用算法。
线索二叉树是一种利用空指针存储前驱 和后继结点的二叉树。
图结构
图的定义
图是由顶点和边组成的非线性结构,用于描述 事物之间的关系。
数据结构的基本概念
数据结构包括元素、关系和操作等基本概念。
线性结构
线性表的定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4. 二叉树的存储结构
一,顺序存储结构 按二叉树的结点" 按二叉树的结点 " 自上而 B 从左至右" 编号, 下 , 从左至右 " 编号 , 用 一组连续的存储单元存储. 一组连续的存储单元存储 . D E
H I A
T[0]一 T[0]一 般不用
C F G
问:顺序存储后能否复原成唯一对应的二叉树形状? 顺序存储后能否复原成唯一对应的二叉树形状? 若是完全/满二叉树则可以做到唯一复原. 答:若是完全/满二叉树则可以做到唯一复原. 而且有规律:下标值为i的双亲, 而且有规律:下标值为i的双亲,其左孩子的下标值必为 性质5 2i,其右孩子的下标值必为2i 2i+ 2i,其右孩子的下标值必为2i+1(即性质5) 例如,对应[2]的两个孩子必为[4] [5],即 [2]的两个孩子必为[4]和 例如,对应[2]的两个孩子必为[4]和[5],即B的左孩子必 是D,右孩子必为E. D,右孩子必为E 右孩子必为
性质5: 对完全二叉树,若从上至下,从左至右编号, 性质5: 对完全二叉树,若从上至下,从左至右编号,
则编号为i 的结点,其左孩子编号必为2i, 则编号为 的结点,其左孩子编号必为 ,其右孩子编号 时为根,除外). 为2i+1;其双亲的编号必为 (i=1 时为根,除外). ;其双亲的编号必为i/2(
1. 2. 3.
二叉树的定义 二叉树的性质 二叉树的存储结构 二叉树的运算见下一节) (二叉树的运算见下一节)
2
2. 二叉树的性质
(3+2)
性质1: 在二叉树的第i层上至多有2 个结点(i>0). 性质1: 在二叉树的第i层上至多有2i-1个结点(i>0). 性质2: 深度为k的二叉树至多有2 个结点(k>0). 性质2: 深度为k的二叉树至多有2k-1个结点(k>0). 性质3: 对于任何一棵二叉树, 度的结点数有n 性质3: 对于任何一棵二叉树,若2度的结点数有n2个, 则叶子数( 必定为n 则叶子数(n0)必定为n2+1 (即n0=n2+1) )
√
D) 度 D )2 k
√ 个结点. 个结点.
√
D ) 2 9 -1
3
对于两种特殊形式的二叉树(满二叉树和完全二叉树), 对于两种特殊形式的二叉树(满二叉树和完全二叉树), 还特别具备以下2个性质: 还特别具备以下2个性质:
性质4: 具有n个结点的完全二叉树的深度必为log2n+1 性质4: 具有n个结点的完全二叉树的深度必为
证明:根据性质2 深度为k的二叉树最多只有2 个结点, 证明:根据性质2,深度为k的二叉树最多只有2k-1个结点,且完全二叉树的定 义是与同深度的满二叉树前面编号相同,即它的总结点数n位于k层和k 义是与同深度的满二叉树前面编号相同,即它的总结点数n位于k层和k-1层满 二叉树容量之间, <n≤2 二叉树容量之间,即 2k-1-1<n≤2k-1 或2k-1≤n<2k 三边同时取对数,于是有: 因为k是整数,所以k= log2 三边同时取对数,于是有:k-1≤log2n<k 因为k是整数,所以k= log2n +1
注:"先,中,后"的意思是指访问的结点D是先于子树 的意思是指访问的结点 是先于子树 出现还是后于子树出现. 出现还是后于子树出现.
12
例1: :
A B D E C 先序遍历的结果是: 先序遍历的结果是 : A B D E C 中序遍历的结果是: 中序遍历的结果是 : D B E A C 后序遍历的结果是: 后序遍历的结果是 : D E B C A
14
遍历的算法实现:用递归形式格外简单! 遍历的算法实现:用递归形式格外简单!
回忆1 二叉树结点的数据类型定义: 回忆1:二叉树结点的数据类型定义: typedef struct node *tree_pointer; typedef struct node { int data; tree_pointer left_child, right_child; } node; 回忆2: 章自测卷4.2题 回忆 :第1章自测卷 题: 章自测卷 则三种遍历算法可写出: 则三种遍历算法可写出: long int fact(n) //求n! 求 int n; { long f; if(n>1)f=n*fact(n-1); else f=1; return(f); }
9
例:
A B C D E
A ^ B^ C^ D ^ ^ E ^
10
6.3
遍历二叉树和线索二叉树
一,遍历二叉树(Traversing Binary Tree) 遍历二叉树 )
遍历定义——指按某条搜索路线遍访每个结点且 指按某条搜索路线遍访每个结点且 遍历定义 不重复(又称周游). 不重复(又称周游). 遍历用途——它是树结构插入,删除,修改, 遍历用途——它是树结构插入,删除,修改,查 它是树结构插入 找和排序运算的前提, 找和排序运算的前提,是二叉树一 切运算的基础和核心. 切运算的基础和核心. 遍历方法——牢记一种约定,对每个结点的查看 牢记一种约定, 遍历方法 牢记一种约定 都是"先左后右" 都是"先左后右" .
7
[1] [2] [3] [4] [5] [6] [7] [8] [9]
A B C D E F G H I
讨论:不是完全二叉树怎么办? 讨论:不是完全二叉树怎么办? 答:一律转为完全二叉树! 一律转为完全二叉树!
方法很简单,将各层空缺处统统补上"虚结点" 其内容为空. 方法很简单,将各层空缺处统统补上"虚结点",其内容为空. [1] A A [2] B [3] ^ B [4] C C [5] ^ [6] ^ D [7] ^ E [8] D [9] ^ … . 缺点: 浪费空间; 插入, 缺点:①浪费空间;②插入,删除不便 [16] E
第6章 树和二叉树( Tree & Binary Tree ) 章 树和二叉树(
(今日授课内容是本章及本课程的重点) 今日授课内容是本章及本课程的重点)
6.1 6.2 6.3 6.4 6.5
树的基本概念 二叉树 遍历二叉树和线索二叉树 树和森林 赫夫曼树及其应用
上机内容: 上机内容:
Huffman 编/译码器的设计与实现
第i层上的满 结点数为2 结点数为2i-1
另一法:可先求2度结点数,再由此得到叶子总数. 另一法:可先求2度结点数,再由此得到叶子总数. 层的2 255)个结点肯定都是2 完全二叉) 首先, 层的 首先,k-2层的28-1(255)个结点肯定都是2度的(完全二叉) 另外,末层叶子(刚才已求出为489 所对应的双亲也是度= 489) 另外,末层叶子(刚才已求出为489)所对应的双亲也是度=2, 共有489/2 244个 (共有489/2=244个). 所以,全部2度结点数为255 255( 层 244( 层 499个 所以,全部2度结点数为255(k-2层)+244(k-1层)=499个; 总叶子数=2度结点数+1=500个. 总叶子数= 度结点数+1=500个 500
(实验要求参见严题集P149 ) 实验要求参见严题集P149
1
6.2
二叉树
的树? 为何要重点研究每结点最多只有两个 "叉" 的树? 二叉树的结构最简单,规律性最强; 二叉树的结构最简单,规律性最强; 可以证明,所有树都能转为唯一对应的二叉树,不失一般性. 可以证明,所有树都能转为唯一对应的二叉树,不失一般性.
课堂练习: 课堂练习: 中各结点的度的最大值称为树T 1. 树T中各结点的度的最大值称为树T的
A) 高度 A )2 k-1 A )2 9 B) 层次 B) log2k B )2 8 C) 深度 C ) 2 k- 1 C )9
. 个.
2.深度为 的二叉树的结点总数 2.深度为k的二叉树的结点总数,最多为 深度为 的二叉树的结点总数, 深度为9 3. 深度为9的二叉树中至少有
口诀 口诀: DLR—先序遍历,即先根再左再右 先序遍历, 先序遍历 LDR—中序遍历,即先左再根再右 中序遍历, 中序遍历 LRD—后序遍历,即先左再右再根 后序遍历, 后序遍历
13
例2:用二叉树表示算术表达式 :
+ * * / A B C D E
先序遍历 +* * /AB C DE 前缀表示 中序遍历 A/B*C *D +E 中缀表示 后序遍历 AB/C *D *E+ 后缀表示 层序遍历 +*E*D /CAB
8
二,链式存储结构 用二叉链表即可方便表示. 用二叉链表即可方便表示. 一般从根结点开始存储. 一般从根结点开始存储. 相应地, (相应地,访问树中结点时 也只能从根开始) 也只能从根开始)
left_child
data
right_child
data
注:如果需要倒查某结点的 双亲, 双亲,可以再增加一个双亲 right_child left_child 直接前趋)指针, 域(直接前趋)指针,将二 叉链表变成三叉链表. 叉链表变成三叉链表. 二叉树结点数据类型定义: 二叉树结点数据类型定义: typedef struct node *tree_pointer; typedef struct node { int data; tree_pointer left_child, right_child; } node;
11
遍历规则——— 遍历规则
二叉树由根,左子树,右子树构成,定义为 , , 二叉树由根,左子树,右子树构成,定义为D, L,R D, L,R的组合定义了六种可能的遍历方案: 的组合定义了六种可能的遍历方案: , , 的组合定义了六种可能的遍历方案 LDR, LRD, DLR, DRL, RDL, RLD 若限定先左后右,则有三种实现方案: 若限定先左后右,则有三种实现方案: DLR LDR LRD 先 (根)序遍历 根 序遍历 中 (根)序遍历 根 序遍历 后(根)序遍历 根 序遍历