PPT-第2章非线性数据结构树和图.ppt
《PPT-第2章非线性数据结构树和图.ppt》由会员分享,可在线阅读,更多相关《PPT-第2章非线性数据结构树和图.ppt(95页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、下一页上一页停止放映第第2 2章章 非线性数据结构非线性数据结构树和图树和图西安交通大学计教中心西安交通大学计教中心下一页上一页停止放映树形结构树形结构是以分支关系来定义的层次结构。在客观世界中树形结构广泛存在,并应用于:人类社会的族谱、家谱、行政区域划分管理;各种社会组织机构;在计算机领域中,用树表示源程序的语法结构;在OS中,文件系统、目录等组织结构也是用树来表示的。2下一页上一页停止放映树的逻辑结构树是一种数据结构,可用二元组表示为:Tree=(D,R)其中:D 是具有相同特性的数据元素的集合;R 是数据元素间逻辑关系的集合,且满足:在D中存在唯一的称为根的数据元素,没有前趋;D中其余数
2、据元素都有且只有一个前趋;D中所有元素,或有若干个互不相同的后继(子树),或无后继(叶结点);则称Tree为树。3下一页上一页停止放映树的递归定义:树是由树是由n n个具有相同特性的数据元素组成的集合。个具有相同特性的数据元素组成的集合。若若n=0n=0,则称其为空树。一棵非空树,则称其为空树。一棵非空树T T必须满足:必须满足:1 1)其中有一个特定的元素称为)其中有一个特定的元素称为T T的根的根rootroot。2 2)除根以外的集合可被划分为)除根以外的集合可被划分为m m个不相交的子集个不相交的子集T T1 1,T T2 2,T Tm m,其中每个子集都是树。它们称,其中每个子集都是
3、树。它们称为根为根rootroot的子树。的子树。GACFDEB树的一般形式树的一般形式4下一页上一页停止放映树结构举例C1(章)BOOK 1.1(节)1.2 C1 C2 C3 C2 2.1 1.1 1.2 2.1 2.2 2.3 2.11 2.12 2.2 2.1.1 2.1.2 2.3C3书目录 目录树 树结构5下一页上一页停止放映与树相关的术语 结点:在树结构中一般把数据元素及其若干指向子树的分支称为结点。结点的度:结点拥有的非空子树的个数。树的度:树中所有结点的度的最大值。叶子结点:度为0的结点。分支结点:至少有一个非空子树的结点。孩子结点和父结点:某结点所有子树的根结点都称为该结点的
4、孩子结点,同时该结点也称为其孩子结点的父结点。6下一页上一页停止放映 兄弟结点:具有相同父结点的结点互为兄弟结点。结点的层次:根结点的层次为1,其子结点的层次为2。依次类推,子结点的层次总比父结点多一层。树的深度:树中结点所在的最大层次。有序树和无序树:将树中各结点的子树看成自左向右有序的,则称该树为有序树。否则称为无序树。森林:由零棵或有限棵互不相交的树组成的集合。7下一页上一页停止放映二叉树的定义二叉树是另一种树形结构:Binary_Tree=(D,R)其中:D 是具有相同性质的数据元素的集合;R 是在D上某个两元关系的集合,且满足:D中存在唯一称为根的数据元素,没有前趋;D中其余元素都有
5、且仅有一个前趋;每个结点至多只有两个子树;D中元素,或有两个互不相交后继,或无后继;左、右子树分别又是一棵二叉树。8下一页上一页停止放映二叉树的五种基本形态二叉树的五种基本形态 (a)(b)(c)(d)(e)O空结点空结点 O单个结点单个结点OO右子树为空右子树为空的二叉树的二叉树OO左子树为空左子树为空的二叉树的二叉树左、右子左、右子树非空的树非空的二叉树二叉树OOO9下一页上一页停止放映二叉树与树的区别二叉树与树的区别表达形式(对3个结点)普通树 二叉树(a)(b)(c)(d)(e)OOOOOO有两种不同形式有两种不同形式(a)(b b)OOOOOOOOOOOOOOO有五种不同形式有五种不
6、同形式10下一页上一页停止放映二叉树与树的区别(二)二叉树与树的区别(二)观念二叉树的子树有顺序关系,分左子树和右子树,而树则无此区分;二叉树的分支度一定为0、1或2,而树的度可大于2。11下一页上一页停止放映特殊二叉树特殊二叉树满二叉树完全二叉树平衡二叉树二叉排序树12下一页上一页停止放映满二叉树满二叉树q当当二二叉叉树树每每个个分分支支结结点点的的度度都都是是2 2,且且所所有有叶叶子子结点都在同一层上,则称其为满二叉树。结点都在同一层上,则称其为满二叉树。q若若k k为为二二叉叉树树T T的的深深度度,且且T T中中共共有有2 2k-1-1个个结结点点(k k 1 1),则称),则称T
7、T为满二叉树。为满二叉树。(a)满二叉树 (b)非满二叉树 OOOO O OOOOOOOO13下一页上一页停止放映完全二叉树完全二叉树q从满二叉树叶子所在的层次中,自右向从满二叉树叶子所在的层次中,自右向左连续删除若干叶子所得到的二叉树被左连续删除若干叶子所得到的二叉树被称为完全二叉树。称为完全二叉树。(a)完全二叉树 (b)非完全二叉树OOOOOOOOOOO叶结点只可能出现在层次最大的两层上。14下一页上一页停止放映平衡二叉树平衡二叉树二叉树上任一结点的左子树深度减去右子树深度的差值,称为该结点的平衡因子。任意结点左、右子树的深度之差的绝对值1,这样的树称为平衡二叉树。OOOOOOO OOO
8、OOOOOO(a)平衡二叉树 (b)非平衡二叉树15下一页上一页停止放映二叉排序树定义二叉排序树定义二叉排序树或者是空二叉树;或者是:左子树上所有结点的值均小于根结点的值;右子树上所有结点的值均大于等于根结点的值;左、右子树本身又是一棵二叉排序树。10571114181515141851012137(a)二叉排序树 (b)非二叉排序树16下一页上一页停止放映二叉树的性质一二叉树的性质一二叉树的第i层上至多有2i-1个结点(i 1)。利用归纳法证明:i=1时,只有一个结点,对的;假设对所有的j,1 j i,命题成立,即在第j层上,至多有2j-1 个结点。由归纳假设,第i-1层上至多有2i-2 个
9、结点。由于二叉树的每个结点的度至多为2,故第i层上的最大结点数为第i-1层上的最大结点数的2倍,即 22i-2=2i-1。17下一页上一页停止放映二叉树的性质二二叉树的性质二深度为深度为h的二叉树上至多含的二叉树上至多含2h-1个结点个结点(h1)。i=1h (第(第i i层上的最大结点数)层上的最大结点数)hi=1=2 2i-1i-1 =2 =2h h-1-1证明:证明:由性质一可见,深度为h的二叉树的最大结点数为:18下一页上一页停止放映包含包含n(n0)个结点的二叉树总的分支数为个结点的二叉树总的分支数为n-1。二叉树的性质三二叉树的性质三证明:证明:二二叉叉树树中中除除了了根根结结点点
10、之之外外每每个个元元素素有有且且只只有有一一个个父父结结点点。在在所所有有子子结结点点与与父父结结点点间间有有且且只只有有一一个个分分支支,即即除除根根外外每每个个结结点点对对应应一一个个分分支支,因此二叉树总的分支数为因此二叉树总的分支数为n-1。OOOO O OOOOOOOO19下一页上一页停止放映任意二叉树,若含有任意二叉树,若含有n0个叶结点、个叶结点、n2个度为个度为2的结点,则必存在关系式的结点,则必存在关系式n0=n2+1。二叉树的性质四二叉树的性质四证明:设二叉树含有证明:设二叉树含有n1个度为个度为1的结点,则二叉的结点,则二叉树结点总数显然为:树结点总数显然为:n0+n1+
11、n2(2-2)再看树的分支数,n2个度为2的结点必然有2n2个分支,n1个度为1的结点必然有n1个分支。又因为除根结点外,其余每个结点都有一个分支进入。因此二叉树的分支数加1就是结点总数。即结点总数为:1+n1+2n2(2-3)由(2-2)和(2-3)两式可知:n0=n2+120下一页上一页停止放映具有具有n个结点的完全二叉树的深度为个结点的完全二叉树的深度为log2(n)+1。二叉树的性质五二叉树的性质五证明:证明:假设二叉树的深度为假设二叉树的深度为h,则必有则必有2h-1-1n2h-1,于是有于是有2h-1n+12h,也就是,也就是2h-1n2h,从而得到从而得到h-1log2(n)n,
12、则则该该结结点点无无左左孩孩子子。否否则则,编编号号为为2i的结点为其左孩子结点;的结点为其左孩子结点;若若2i+1n,则则该该结结点点无无右右孩孩子子。否否则则,编编号为号为2i+1的结点为其右孩子结点。的结点为其右孩子结点。证明:通过对证明:通过对i进行归纳即可得证。进行归纳即可得证。二叉树的性质六二叉树的性质六22下一页上一页停止放映验证性质六验证性质六 143256 123456123456第第i i个结点就存放在第个结点就存放在第i i个位置上;个位置上;第第i i个结点(个结点(i1)i1)的父结点就存放在第的父结点就存放在第 i/2 i/2个位置个位置;第第i i个结点的左子结点
13、就存放在第个结点的左子结点就存放在第2*i2*i的位置的位置;右子存放在第右子存放在第2*i+12*i+1的位置(的位置(若若2i+1n )。)。23下一页上一页停止放映二叉树的链式存储二叉树的链式存储结点定义:结点定义:structBinTreeNodeElemTypedata;structBinTreeNode*leftChild,*rightChild;structBinTreeNode*root;/定义根结点指针定义根结点指针这里leftChild和rightChild分别为某一结点指向其左孩子和右孩子的指针。对于叶结点或一个新生成的结点而言,其左孩子和右孩子指针都为空值。24下一页上
14、一页停止放映二叉树的链式存储ABCDE利用这种结点形式存储的树一般称为二叉链表。从根结点出发,可以访问二叉树的任何结点。为了能够访问二叉树,必须保留指向根结点的指针。这和单链表必须保留头指针的道理一样。25下一页上一页停止放映二叉树的遍历二叉树的遍历遍历(Traversing)是树形结构的一种重要运算,即按一定的次序系统地访问结构中的所有结点,使每个结点只被访问一次。遍历的方法很多,常用的有:前序法(PreOrder)中序法(InOrder)后序法(PostOrder)26下一页上一页停止放映前序法(前序法(PreOrder)方法描述:从根结点a开始访问,接着访问左子结点b,最后访问右子结点c
15、。即:根根左子左子右子右子abc遍历序列a b c27下一页上一页停止放映中序法(中序法(InOrder)方法描述:从左子结点b开始访问,接着访问根结点a,最后访问右子结点c。即:根根左子左子右子右子abc遍历序列b a c28下一页上一页停止放映后序法(后序法(PostOrder)方法描述:从左子结点b开始访问,接着访问右子结点c,最后访问根结点a。即:根根左子左子右子右子abc遍历序列b c a29下一页上一页停止放映二叉树的遍历举例二叉树的遍历举例 oooooooooABCDEFGHI前序遍历序列:前序遍历序列:中序遍历序列:中序遍历序列:后序遍历序列:后序遍历序列:DGEBHIFCAD
16、GEBHIFCADBGEACHFIDBGEACHFIABDEGCFHIABDEGCFHI30下一页上一页停止放映二叉树遍历算法(递归、前序法二叉树遍历算法(递归、前序法)voidPreOrder(BinTreeNode*t)if(t)Visit(t);/访问根结点访问根结点PreOrder(t-leftChild);/遍历左子树遍历左子树PreOrder(t-rightChild);/遍历右子树遍历右子树ABCDEF前序遍历二叉树的序列为:A B C D E F31下一页上一页停止放映二叉树遍历算法(递归、前序法验证)二叉树遍历算法(递归、前序法验证)打印A取A.左子(B)打印B取B.左子(C
17、)打印C取C.左子(空)取C.右子(空)取B.右子(D)打印D取D.左子(E)打印E取E.左子(空)取E.右子(空)取D.右子(F)打印F取F.左子(空)取F.右子(空)取A.右子(空)结束A AB BC CD DE EF FATOPATOPBATOPBATOPBCATOPDATOPDEATOPDATOPFATOP32下一页上一页停止放映(2 2)中序遍历)中序遍历对对一一颗颗非非空空二二叉叉树树进进行行中中序序遍遍历历时时,首首先先按按中中序序遍遍历历方方式式访访问问左左子子树树,然然后后访访问问根根结结点点,最最后后按按中中序序遍遍历历方方式式访访问问右右子子树树。中中序序遍遍历历算法如下
18、:算法如下:voidInOrder(BinTreeNode*t)if(t)InOrder(t-leftChild);/遍历左子树遍历左子树Visit(t);/访问根节点访问根节点InOrder(t-rightChild);/遍历右子树遍历右子树33下一页上一页停止放映(3 3)后序遍历)后序遍历对对一一颗颗非非空空二二叉叉树树进进行行中中序序遍遍历历时时,首首先先按按后后序序遍遍历历方方式式访访问问左左子子树树,然然后后按按后后序序遍遍历历方方式式访访问问右右子树,最后访问根结点。子树,最后访问根结点。后序遍历后序遍历算法如下:算法如下:voidPostOrder(BinTreeNode*t)
19、if(t)PostOrder(t-leftChild);/遍历左子树遍历左子树PostOrder(t-rightChild);/遍历右子树遍历右子树Visit(t);/访问根节点访问根节点34下一页上一页停止放映表达式树及应用表达式树及应用在计算机中对表达式进行分析和计算是一项重要的任务。举例,用二叉树表示表达式:a+b*(c-d)前序遍历序列:中序遍历序列:后序遍历序列:分析:每个叶结点为运算对象;每个非叶结点为运算符;每个子树对应一个子表达式。表达式处理一般采用后序法,也称“逆波兰”法。表达式处理规则:见运算数入栈;见运算符,取两个栈顶元素运算后再压栈;直到处理结束。efbcda a35下
20、一页上一页停止放映表达式树应用举例表达式树应用举例(1)a b c d 入栈dcba(1)(2)c-dba(3)b*(c-d)aa+b*(c-d)(4)(5)a+b*(c-d)fe(6)e/fa+b*(c-d)(7)a+b*(c-d)-e/f(2)遇-,c d 出栈,运算后再压栈;(3)遇*,(c-d)和 b 出栈,运算后再压栈;(4)遇+,b*(c-d)和a出栈,运算后再压栈;(5)e f 入栈(6)遇/,f e 出栈,运算后再压栈;(7)遇-,a+b*(c-d)和e/f出栈,运算后再压栈。36下一页上一页停止放映图的基本概念图的基本概念图图的的来来源源:通通信信网网、交交通通网网等等,它它
21、表表现现了了数数据据对对象象间间多多对对多多的的联联系系。在在该该结结构构中中,数数据据元元素素一一般般称为顶点称为顶点。图的定义:图的定义:图图是是对对结结点点的的前前趋趋和和后后继继个个数数不不加加限限制制的的一一一一种种种种数数据据结结构构,它它是是是是由由由由顶顶顶顶点点点点集集集集合合合合及及及及顶顶顶顶点点点点间间间间的的的的关关关关系系系系集集集集合合合合组组组组成。一般记作成。一般记作成。一般记作成。一般记作:Graph Graph Graph Graph(V,E)(V,E)(V,E)(V,E)其其其其中中中中:V V是是是是顶顶顶顶点点点点的的的的有有有有限限限限非非非非空空
22、空空集集集集合合合合;E E是是是是顶顶顶顶点点点点之之之之间间间间关关关关系的有限集合。系的有限集合。系的有限集合。系的有限集合。37下一页上一页停止放映图例图例设图G1=(V,E)V=v1,v2,v3,v4E=(v1,v2),(v1,v3),(v2,v1),(v2,v3),(v2,v4),(v3,v1),(v3,v2),(v4,v2)oooov1v2v3v4G138下一页上一页停止放映有向图、无向图有向图、无向图有向图(Digraph)图G中顶点的偶对若是有向的,称为有向图。如图G2所示。为示区别,其偶对用表示。例 G2=(V,E)V=1,2,3,4 E=1,2,1,3,3,4,4,1无向
23、图(Undigraph)图G中顶点的偶对若是无向的,称为无向图,其偶对用(vx,vy)表示,如图G1所示。1324G2oooov1v2v3v4G139下一页上一页停止放映边、弧边、弧边(Edge)顶点间的关系可描述为顶点的偶对,也称为顶点的边。记为:(Vx,Vy)。边是无序的,可看成是(Vx,Vy),也可看成是(Vy,Vx)。弧(Arc)若顶点间的边是有方向性(有序)的,则称该偶对为弧。记为:Vx,Vy。弧是有序的,Vx,Vy表示从Vx到Vy。弧头(Head)弧的终点(TerminaL Node)称为弧头(方向前方)。弧尾(Tail)弧的起始点(Initial Node)称为弧尾(方向后方)。
24、弧 Vx,Vy表示为,弧尾弧尾弧头弧头Vx VyVx Vy40下一页上一页停止放映顶点、邻接点顶点、邻接点顶顶点点(VertexVertex)图中的数据元素(结点)称为顶点。如图G1、G2中的1、2,1,2。邻邻接接点点(AdjacentAdjacent)无向图中,若边(x,y)E,则x和y互为邻接点;有向图中,若弧x,y E,则y是x的邻接点,反之,不是。VxVyx、y互为邻接点互为邻接点VxVyy是是x的邻接点的邻接点41下一页上一页停止放映顶点的度(顶点的度(Degree)无向图中,顶点的度是以该顶点为一个端点的边的条数。例如,G1中V2的度为3,V4的度为1。有向图中,以某顶点为弧头的
25、弧的数目称为该顶点的入度(Indegree)。例如G2中顶点1的入度为1。以某顶点为弧尾的弧的数目称为该顶点的出度(Outdegree)。例如G2中顶点1的出度为2。该顶点的度=入度+出度。例如,G2中顶点1的度=2+1=3。oooov1v2v3v4G11324G242下一页上一页停止放映路径、长度路径、长度路径(Path)在图中,从顶点Vx到顶点Vy的顶点序列(Vx,V1,V2,,Vn,Vy)称为从Vx到Vy的路径。路径可能是不唯一的。例如,G1中,V1到V3的路径为:(V1V2V3)或(V1V3);而G2中,1到4的路径为。长度(Length)路径的长度是该路径上边或弧的数目。例如,G1中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PPT 非线性 数据结构
限制150内