收藏 分享(赏)

非线性结构.ppt

上传人:Facebook 文档编号:2810952 上传时间:2018-09-28 格式:PPT 页数:38 大小:341KB
下载 相关 举报
非线性结构.ppt_第1页
第1页 / 共38页
非线性结构.ppt_第2页
第2页 / 共38页
非线性结构.ppt_第3页
第3页 / 共38页
非线性结构.ppt_第4页
第4页 / 共38页
非线性结构.ppt_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、1.3 非线性结构,非线性结构的逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。最主要的非线性结构是树结构和图结构。 131树结构及其基本概念树结构是一类重要的非线性结构。树结构是结点之间有分支、层次关系的结构,在客观世界中,树结构是大量存在的,例如家谱、行政组织机构都可用树形象地表示。在计算机领域中,树结构也被广泛应用,如计算机磁盘文件的管理,是一种从根目录到各级子目录的分层结构i在数据库系统中,常采用树来组织数据信息。,树结构非常类似于自然界中的树,也有树根、树叶及联系它们的支干。不过这里指的树结构是一种倒生树,可以用递归的方式定义如下:树是一个或多个结点元素组成的有限集合T,且满

2、足如下条件:(1)有一个特定的结点元素,称为根结点Root; (2)其余结点元素分成m个(m0)互不相交的有限集T1,T2,Tm,其中每个集又都是一棵树,这些树称为Root的子树。在树中,一个结点元素常简称结点,采用递归方式定义树结构,揭示出树的固有特性。实际上,树中的每个结点都是该树中某一子树的根。,(1)叶子 没有后继的结点称为叶子(或终端端结点),图1.23中的结点D、E、F、G、H、J为终端结点; (2)分支结点 非叶子结点称为分支结点 (或:非终端结点)。 (3)结点的度 一个结点的子树数目称为该结点的度。B的度为2,结点C的度为3;D、J的度为0; (4)树的度 树中各结点的度的最

3、大值称为该树的度,上图所示的树的度为3。,A,B,C,D,E,F,G,H,I,J,第一层,第二层,第三层,第四层,Root,(5)子结点 某结点子树的根称为该结点的子结点。 (6)父结点 相对于某结点子树的根,称该结点为子树 根的父结点。 (7)兄弟 具有同一父结点的子结点称兄弟。如图结点C是结点G、H、I的父结点;结点G、H、I是结点C的子结点。J结点是结点I的子结点;结点G、H、I互为兄弟。 (8)结点的层次 根结点的层次为1,其他任何的层等于它的父结点的层数加1。 (9)树的深度 一棵树中,结点的最大层次值就是树的深度。图所示的树的深度为4。 (10)有序树和无序树 如果一棵树中结点的各

4、子树从左到右是有序的,即若交换了某结点各子树的相对位置则构成了不同的树,称这棵树为有序树,反之则为无序树。 (11)森林 森林是n棵树的集合(n0)。任何一棵树,删去根结点,树就变成了森林。,1.3.2二叉树结构,二叉树是一类非常重要的非线性结构,许多 实际问题抽象出来的数据结构往往都是二叉树, 即使一般的树结构也能简单地转换为二叉树。 一、二叉树的基本概念 二叉树的递归定义二叉树是n个接点的有限集合(n0);这个集合可以是空(即n=0),此时称为为空二叉树;或者由一个根结点和两棵互不相交的被称为根的左子树和右子树组成,左子树和右子树分别又是一棵二叉树。,根据以上二叉树的递归定义,可以知道,二

5、叉树可 以为空集,或者只有根结点左右子树为空,或者只有左 子树或右子树,或者左右子树都存在。二叉树的五种形 态如下图所示。,空二叉树,仅有一个结点的二叉树,根的左子树非空根的右子树为空的二叉树,根的左子树为空根的右子树非空的二叉树,根的左右子树皆为非空的二叉树,一般树与二叉树在概念上的区别 树至少有应有一个结点,而二叉树可以是空; 二叉树的结点的子树要区分左子树和右子树,即使只有一棵子树的情况下也要明确该子树是左子树还是右子树,而树中不区分子树顺序。 几个关于二叉树的概念,A 1,B 2,C 3,D 4,E 5,F 6,G 7,H 8,I 9,J 10,K 11,L 12,M 13,N 14,

6、O 15,(1)满二叉树: 在一棵二叉树中,如果所有非叶子结点都存在左右子树,并且所有叶结点都在同一层上,这样的一棵二叉树称作满二叉树。,(2)完全二叉树: 在一棵二叉树中,如果至多只有最下面两层上的结点的度数可以小于2,并且最下一层的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。,A,B,C,D,E,F,G,H,I,J,K,L,A,B,C,D,E,F,G,H,I,J,K,L,完全二叉树,非完全二叉树,(3)二叉排序树:它或者是空二叉树,或者是具有如下性质的二叉树:左子树上所有结点的关键字均小于根结点的关键字;右子树上所有结点的关键字均大于等于根结点的关键字。左子树和右子树本身

7、又各是一棵二叉排序树。,8,4,10,1,4,9,17,1,6,12,二叉排序树,二、二叉树的存储结构,二叉树的存储方式分为顺序存储和链式存储两种。 顺序存储方式是把二叉树的所有结点按照一定的次序存储到一片连续的存储单元中,实际上就是把二叉树这种非线性结构线性化。 对于满二叉树和完全二叉树具有性质:对于有n个结点的满二叉树和完全二叉树,如果从上至下和从左至右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意序号i的结点有: (1)如果i1,则序号为i的结点的父结点的序号为i/2(取整);如果i=1,则结点是根结点,无父结点;,(2)如果2in,则序号为i的结点的左子结点的序号为2i ; (

8、3)如果2i1n,则序号为i的结点的右子结点的序号为2i 1; 满二叉树和完全二叉树中结点的序号可以唯一地反应出结点之 间的逻辑关系。,A,B,C,D,E,F,G,H,I,J,K,L,结点序号,然而对于一般的二叉树,如果按照从上到下,从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系。这时可以将一般二叉树进行改造,人为添加一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组存储。但是,这样可能会造成大量的存储空间的浪费,尤其是那些右单支二叉树。对于这样的情况,比较适合的方式是采用链式存储方式存储。 二叉树链表的结点结构,

9、右指针域,指向结点的右子树根,数据域,左指针域,指向结点的左子树根,对于二叉树链表,如果某结点的左子树或右子树为 空,则相应的指针域为“空”。此外还设置一指针变量指向 二叉树的根结点,称为头指针。二叉链表的头指针可以 唯一地确定一棵二叉树。对于二叉树链表,可以比较方便的从某个结点出发 查找子女结点,但是要从某个结点出发查找其父结点就 比较麻烦。因此可以采用三叉链表。,右指针域,指向结点的右子树根,数据域,左指针域,指向结点的左子树根,父节点指针域,一棵二叉树的链式存储结构,A,B,C,D,E,F,(a) 二叉树,(b) 二叉链 表结构,(c) 三叉链表结构,三、二叉树的遍历,遍历是树结构的基本

10、操作。树遍历的含义是指用一 定的规律走遍树的每一个结点,使每个结点被访问一次 而且只被访问一次。任何一棵二叉树都由三部分组成:即根结点(记作 D)、左子树(记作L)、右子树(记作R)。这样遍历 一棵二叉树的次序有六种:DLR、LDR、LRD、DRL、 RDL、RLD。如果限定左右子树的访问是先左后右,则 只有三种: DLR(先序遍历) LDR(中序遍历) LRD(后序遍历),设二叉树的存储结构为二叉链表,其结点的类型定 义如下:typedef struct btreenod elemtype data;struct btreenode *LC;struct btreenode *RC; bno

11、de;bnode *BT; 1、先序遍历:先序遍历的递归定义为:若二叉树为空,遍历结束,否则:(1)访问根结点;(2)按先序遍历方式遍历根结点的左子树;(3)按先序遍历方式遍历根结点的右子树;,二叉树的先序遍历算法 void preorder (bnode *BT) if (BT= =NULL)return;else visite (BT); /*访问BT指向的根结点*/if (BT-LC ! NULL) preorder (BT-LC);if (BT-RC ! NULL) preorder (BT-RC);,中序遍历的递归定义为:若二叉树为空,遍历结束,否则:(1)按中序遍历方式遍历根结点的

12、左子树;(2)访问根结点;(3)按中序遍历方式遍历根结点的右子树; 二叉树的中序遍历算法 void inorder (bnode *BT) if (BT= =NULL)return;else if (BT-LC ! NULL) inorder (BT-LC);visite (BT); /*访问BT指向的根结点*/ if (BT-RC ! NULL) inorder (BT-RC);,后序遍历的递归定义为:若二叉树为空,遍历结束,否则:(1)按后序遍历方式遍历根结点的左子树;(2)按后序遍历方式遍历根结点的右子树;(3)访问根结点; 二叉树的后序遍历算法 void postorder (bnod

13、e *BT) if (BT= =NULL)return;else if (BT-LC ! NULL) postorder (BT-LC);if (BT-RC ! NULL) postorder (BT-RC); visite (BT); /*访问BT指向的根结点*/ ,例:先序遍历如图所示的二叉树,A,B,C,D,E,F,G,H,A,B,D,G,E,F,C,H,例:中序遍历如图所示的二叉树,A,B,C,D,E,F,G,H,D,G,B,E,A,H,F,C,例:后序遍历如图所示的二叉树,A,B,C,D,E,F,G,H,G,D,E,B,H,C,F,A,A,B,C,D,E,F,G,H,I,J,先序遍历

14、,A,B,C,D,E,F,G,H,I,J,中序遍历,B,C,D,A,F,E,H,J,I,G,后序遍历,D,C,B,F,J,I,H,G,E,A,练习:,四、根据遍历序列构造二叉树由一棵给定的二叉树可以获得三种遍历序列,同样,也可以由这些遍历序列来重新构造二叉树。单用一个遍历序列是无法构造二叉树的,因为无法从遍历序列中区分二叉树的左、右子树,但利用中序遍历序列,并结合先序遍历序列和后序遍历序列中任何一个序列就能重新构造二叉树。 第一步:从先序遍历序列中取出第一个结点,该结点一定是二叉树的根。然后在中序遍历序列中找出根结点,根结点前面的结点序列就是左子树的中序遍历序列,根结点后面的结点序列就是右子树

15、的中序遍历序列。 第二步:对根的左子树先序遍历序列和中序追历序列及右子树的先序遍历序列和中序遍历序列。再执行第一步,直到得出所有叶子结点为止。,例6 已知一棵二叉树的先序遍历序列为ABCDEFGHIJ中序遍历序列为CBDEAFHIGJ,试构造这棵二叉树。构造过程由图示如下:,A,C,B, D,E,F,H,I G,L,A,B,F,C,D, E,H,I G,L,A,B,F,D,C,E,H, I,J,G,A,B,F,D,C,G,E,H,J,I,练习:已知一棵二叉树的先序遍历序列为ABCDEFG中序遍历序列为CBEDAFG,试构造这棵二叉树。,五、二叉排序树的生成前面已给出了二叉排序树的定义,从二叉排

16、序村的定义可以得出二叉排序树的一个重要性质:按中序遍历该树所得的中序序列是一个递增有序列,因此,二叉排序树常用于对数据排序。利用二叉排序树来组织数据,可以减少数据查找次数,提高效率。由给定的数据序列生成二叉排序树的过程是在二叉排序树上插入结点的过程:对一序列k1,k2,kn,先设一棵空二叉排序树,然后将序列中的元素顺次生成结点后逐个插入。插入步骤如下:,第一步:k1作为二叉排序树的根。 第二步:若k2k1,则k2所在结点应插人到k1的 左子树上;否则,插入到k1的右子树上。 第三步:读入ki, ki k1 (根),则进入左子树,否则进入右子树,继续与子树之根比 较,直到某结点kj,若有ki k

17、j且结点kj的左子树为空,则结点ki 插入到结点kj的左子树;若有kikj且结点kj的右子树为空,则结点ki插入到结点kj的右子树。,例7有15个数构成的序列190,381,12,40,410,394,540,760,85,476,800,146, 9,445,600,根据算法的基本思想构造一个二叉排序树。生成过程如图所示。,190,381,12,40,410,394,540,760,85,476,800,146,9,445,600,二叉树的应用,二叉树查询 双路合并排序 表达式求值(P67. 24题 图1) 霍夫曼编码 (最优二叉树):常用于数据压缩 是非推断 软件设计、机械、电子设计,1.

18、3.3 图,图是另一种重要的、比树更复杂的非线性数据结构。在树中,每个结点只与上层的父结点有联系,并可以与其下层的多个子结点有联系,而同一层的结点之间没有任何横向联系。但在图中,结点之间的联系是任意的,每个结点都可以与其他的结点相联系。图的应用范围非常广泛,诸如电网络分析、交通、管道线路、集成电路布线图、工程进度安排等实际问题的处理都可以归纳为图的问题。,一、图的基本概念图G由两个集合V和E组成,记为G(V,E),其中V是顶点的有穷非空集合,E是V中顶点偶对(称为边)的有穷集。通常也将图G的顶点集和边集分别记为V(G)和E(G)。以E(G)可以是空集,若E(G)为空集,则图G只有顶点而没有边。

19、若图G中的每条边都是有方向的,则称G为有向图。在有向图中,一条有向边是由两个顶点组成的有序对,通常用尖括号表示。例如表示一条有向边, Vi是边的始点,Vj是边的终点。因此, 和是两条不同的有向边。有向边也称为弧,边的始点称为弧尾,终点称为弧头。,若图G的每条边都是没有方向的,则称G为无向图。无向图中的边均是顶点的无序对,用圆括号表示。因此无序对( Vi,Vj )和( Vj , Vi )是同一条边。,1,2,3,4,5,2,1,3,6,5,4,无向图G1,有向图G2,集合表示形式: G1=(V,E) V(G1)=1, 2, 3, 4, 5 E(G1)=(1,2),(1,3),(2,3),(3,4

20、),(4,5)G2=(V,E) V(G2)=1, 2, 3, 4, 5,6 E(G2)=, 可见,按照习惯说法,图是一种对结点的前趋和后继个数不加限制的数据结构。,有关图结构的重要术语和概念 (1)邻接点:对于无向图,如果边(v,u) E,则v和u互为邻接点,亦即u是v的邻接点,v也是u的邻接点。对于有向图,如果弧 E,则u是v的邻接点。 (2)顶点的度:常用D(v)表示,在无向图中,顶点的度就是以该顶点为一个端点的边的条数。在有向图中:以某顶点为弧头的弧的数目,称为此顶点的入度,常用ID(V)表示:以某顶点为弧尾的弧的数目称为此顶点的出度,常用OD(V)表示。有向图顶点的度是此顶点的人度与出

21、度之和,即D(v) = ID(V) OD(V) 。无论是有向图,还是无向图,顶点n、边数e和度数之间有如下关系:,(3)路径:在图G中,从顶点v至顶点u的一条路径是顶点的序列(v, v1, v2,vi, u) 并且(v,v1),(v1,v2), , (vi,u)(无向图)或, (有向图)都属于集合E。路径上弧的数目称为该路径的长度。 (4)在无向图中,若每一对顶点之间都有路径,则称此图为连通图。在有向图中,若每一对顶点u和v之间都存在从v到u及u到v的路径,则称此图为强连通图。 (5)网络:如果图G(V,E)中每条边都赋有反映这条边的某种特性的数据,则称此图是一个网络,其中与边相关的数据称为该边的权。,二、图的存储结构图的存储结构有多种表示法,最常用的两种表示方法:邻接矩阵表示法和邻接表表示法。 三、图的遍历(P44)根据搜索路径的方向不同,有两种常用的遍历图的方法:深度优先搜索遍历和广度优先搜索遍历。,V1,V2,V4,V5,V3,V6,V1,V2,V4,V5,V3,V6,深度优先搜索遍历,广度优先搜索遍历,V1 V2 V3 V4 V5 V6,V1 V2 V4 V5 V6 V3,V1,V2,V4,V5,V3,V7,V6,V8,深度优先: 广度优先:,V1 V2 V4 V8 V5 V3 V6 V7,V1 V2 V3 V4 V5 V6 V7 V8,练习,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 中等教育 > 小学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报