- 1、本文档共91页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章数据结构1.3
第1章 数据结构;;1.3.1 树与二叉树;父结点:每一个结点只有一个前件,称为父结点。
子结点:每一个结点可以有多个后件,都称为该结点的子结点。
根结点:没有前件的结点只有一个,称为树的根结点。
叶子结点:没有后件的结点称为叶子结点。; 结点的度:一个结点所拥有的后件 个数称为该结点的度。
度
树的度:所有结点中的最大度称为树的度。
树的深度:树的最大层次称为树的深度。
子树:在树中,以某结点的一个子结点为根构成的树称为该结点的一棵子树。; 父结点、根结点、子结点、叶子结点、
结点的度、树的度、树的深度;;;;1.3.1 树与二叉树;1.什么是二叉树
(1)非空二叉树只有一个根结点;
(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。;例 画出具有3个结点的树和二叉树的所有不同形态。
解:(1) 具有3个结点的树有2种不同的形态,;例 画出具有3个结点的树和二叉树的所有不同形态。
解:(2) 具有3个结点的二叉树有5种不同的形态,;;;;;;;1.3.1 树与二叉树;;1.3.1.3 二叉树的存储结构;;;;;;1.3.1 树与二叉树; 二叉树的遍历是要确定访问各结点的顺序,以便不重不漏地访问到二叉树的所有结点。实际就是将二叉树这种非线性结构按某种需要转化为线性序列,以便以后在对二叉树进行某种处理时直接使用。;;1.3.1.4 二叉树的遍历;;A;1.3.1.4 二叉树的遍历;;A;1.3.1.4 二叉树的遍历;;1.3.1 树与二叉树;二叉排序树及其构造
(1)左子树上的所有结点值均小于根结点值;
(2)右子树上的所有结点值均不小于根结点值;
(3)左、右子树也满足上述两个条件。;;;依次读入给定序列中的每一个元素:
(1)若当前的二叉排序树为空,则读入的元素为根结点;
(2)若读入的元素值小于根结点值,则将元素插入到左子树中;
(3)若读入的元素值不小于根结点值,则将元素插入到右子树中。
无论是插入到左子树还是右子树,同样按照上述方法处理。;1.3.1.5 二叉排序树;1.3.1.5 二叉排序树;1.3.1.5 二叉排序树;1.3.1.5 二叉排序树;二叉排序树的查找:
从根结点开始与被查值进行比较:
(1)若被查值等于根结点值,查找成功。
(2)若被查值小于根结点值,则??找左子树。
(3)若被查值大于根结点值,则查找右子树。
在左、右子树中查找时也采用上述方法。
查找过程直到查找成功或所考虑的子树已空为止。;1.3.1 树与二叉树;1.3.1.6 树、森林与二叉树的转换;树变为二叉树的方法:
(1)连接亲兄弟(不包括堂兄弟)
(2)保留长子(断绝父亲与其他孩子关系)
(3)顺时针旋转45度
特点:根无右子树 ;如图: F={T1 ,T2, T3};森林转换为二叉树的方法
将森林 F={T1,T2 ... Tm}的各棵树分别转成二叉树BT1,BT2 ... BTm
将BTi+1作为BTi根结点的右子树(i=1,2,...,m-1),得到一棵BT。;如图: F={T1 ,T2, T3};二叉树转换森林的方法
将当前根结点和其左子树作为森林的一棵树,并将其右子树作为森林的其他子树;
重复上面直到某结点的右子树为空。;1.3.1 树与二叉树;;1.3.2.1 图的基本概念;1.图的概念:若数据元素集合D中的各元素间存在任意前后件关系,则此数据结构称为图。
2.在具有n个结点的无向图中,边的最大数目为n (n-1)/2。
3.结点的后件个数称为该结点的出度,前件个数称为该结点的入度。入度与出度之和称为该结点的度。
4.实际应用中,若图中任意两结点a与b间规定了一个值f(a,b),则称该图为有值图。;;;;;;;;;;3.邻接表
(“顺序-索引-链接”存储结构);;;;;;;;深度优先搜索法遍历图的递归算法
输入:图中结点数n;邻接表顺序存储空间DATA(1:n)
与LINK(1:n);单链表的存储空间NUM与NEXT。
输出:遍历序列。
PROCEDURE DFSGP(DATA,LINK,n,NUM,NEXT)
定义标志数组MARK(1:n)
FOR k=1 TO n DO MARK(k)=0 [标志数组初始化]
k=1
[FOR k=1 TO n DO]
DFS(DATA,LINK,k,MARK)
[IF MARK(k)=0 THEN DFS(DATA,LINK,k,MARK)]
RETURN;;;;;;;;;;;;;;
文档评论(0)