数据结构 第五章 树.ppt





《数据结构 第五章 树.ppt》由会员分享,可在线阅读,更多相关《数据结构 第五章 树.ppt(70页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5章章 树1非线性结构非线性结构:就是指在该结构中至少一个数据元素就是指在该结构中至少一个数据元素有多个前驱(或多个后继)有多个前驱(或多个后继)。树型结构树型结构:是一类用来描述具有层次结构的非线性是一类用来描述具有层次结构的非线性数据结构。其中以树和二叉树最为常用数据结构。其中以树和二叉树最为常用,在计算机中领在计算机中领域中有着广泛的应用。域中有着广泛的应用。线性结构线性结构线性表线性表串(元素为字符)串(元素为字符)数组与广义表数组与广义表一般表一般表堆栈堆栈队列队列顺序顺序/链式链式 存储存储顺序顺序/链式链式/堆堆 存储存储回顾:回顾:2本章要点本章要点n树形结构的概念和术语;
2、树形结构的概念和术语;n二叉树的定义、性质,满二叉树和完全二叉树的概念;二叉树的定义、性质,满二叉树和完全二叉树的概念;n二叉树的遍历及先序、中序、后序及层次遍历方法;二叉树的遍历及先序、中序、后序及层次遍历方法;n线索二叉树与二叉树的恢复;线索二叉树与二叉树的恢复;n树和森林的存储结构树和森林的存储结构,与二叉树之间的相互转换方法;与二叉树之间的相互转换方法;n哈夫曼树的概念及构造。哈夫曼树的概念及构造。35.1 树的概念树的概念n树是以分支关系定义的层次结构,如:树是以分支关系定义的层次结构,如:41.树的定义树树(Tree)(Tree)是由是由n n 0 0个结点的有限集合个结点的有限集
3、合D D,以及该集合上,以及该集合上关系集合关系集合R R构成的。当构成的。当n=0n=0时,称为空树。对于非空树时,称为空树。对于非空树(即即n n 1)1),满足以下两个条件:,满足以下两个条件:(1)(1)存在一个称为根的特定结点;存在一个称为根的特定结点;(2)(2)其余的结点被分成其余的结点被分成m m 1 1个互不相交的集合个互不相交的集合T T1 1,T T2 2,T Tm m,其中的每个集合都是一棵树,其中的每个集合都是一棵树,T T1 1,T T2 2,T Tm m称为根结称为根结点的点的子树子树。如图所示。如图所示:5树的定义也可以用树的定义也可以用形式化语言形式化语言来描
4、述。树可以用二元组形式来描述。树可以用二元组形式来表示:来表示:Tree=(D,R)Tree=(D,R)其中,其中,D D表示具有相同特性的数据元素的集合,表示具有相同特性的数据元素的集合,R R表示表示D D上数据上数据元素之间的关系,并且满足以下条件:元素之间的关系,并且满足以下条件:若若D D为空集,为空集,TreeTree为空树;若为空树;若D D只含一个数据元素,则只含一个数据元素,则R R为空集,为空集,否则否则R=H,HR=H,H是如下二元关系是如下二元关系:1)1)在在D D中存在唯一的称为根的数据元素中存在唯一的称为根的数据元素rootroot,它在关系,它在关系H H下无下
5、无前驱前驱;2)2)若若D-root D-root ,则存在,则存在D-rootD-root的一个划分的一个划分D Dl l、D D2 2、D Dm m,(m0),(m0),对任意,对任意 j j k(1k(1 j,kj,k m)m)有有 D Dj j D Dk k=,且对任意的且对任意的i(1i(1 i i m)m),唯一存在数据元素,唯一存在数据元素 x xi i D D,有,有root,x H H;3)3)对应于对应于D-rootD-root的划分的划分,H-root,x,H-,有唯有唯一的一个划分一的一个划分H Hl l、H H2 2、HHm m(m0)(m0),对任意,对任意j j
6、k(1k(1 j,kj,k m)m)有有 H Hj j H Hk k=,且对任意的,且对任意的i(1i(1 i i m),Hm),Hi i是是D Di i上的二元关系,上的二元关系,T Ti i=(D=(Di i,HHi i)是根是根rootroot的子树。的子树。6树形图树形图是树结构的最主要表示方式。此外还有:是树结构的最主要表示方式。此外还有:文文氏氏图图表表示示法法,也也叫叫嵌嵌套套集集合合表表示示法法;广广义义表表的的表表示形式示形式,也叫嵌套括号表示法;也叫嵌套括号表示法;凹入表示形式凹入表示形式。例如:。例如:2.树的表示 (A(B(E,F(K,L),G),C(H),D(I(M,
7、N,O),J)(A(B(E,F(K,L),G),C(H),D(I(M,N,O),J)7树的结点(Node):(Node):结点的度(Degree):(Degree):叶子(Leaf)(Leaf)或终端结点或终端结点:非终端结点或分支结点或分支结点:树的度(Degree):(Degree):内部结点:孩子(Child)(Child)与与双亲(Parent):(Parent):兄弟(Sibling):(Sibling):结点的结点的祖先(Ancestors)Ancestors):结点的结点的子孙(Descendants):(Descendants):结点的结点的层次(Level):(Level):
8、堂兄弟:树的树的深度(Depth)(Depth)或或高度:3.树的有关术语8有序树(Ordered Tree)(Ordered Tree):无序树(UnOrdered Tree):(UnOrdered Tree):森林(Forest):(Forest):从逻辑结构上讲从逻辑结构上讲,任何一棵树是一个二元组任何一棵树是一个二元组TreeTree(root,F),(root,F),其中其中rootroot是数据元素称做树的根结点是数据元素称做树的根结点;F;F是是m(m=0)m(m=0)棵树的森林棵树的森林,F,F(T(Tl l,T,T2 2,T,Tm m),),其中其中T Ti i=(r=(ri
9、 i,F,Fi i)称做根称做根rootroot的第的第i i棵子树棵子树;当当m0m0时时,在树根在树根和其子树森林之间存在下列关系和其子树森林之间存在下列关系:RF RFroot,r|i|il,2,m,m0l,2,m,m0这这个个定定义义将将有有助助于于得得到到森森林林和和树树与与二二叉叉树树之之间间转转换换的递归定义。的递归定义。9一、二又树的定义与性质二二叉叉树树(Binary(Binary Tree)Tree)是是另另一一种种树树型型结结构构,是是n n 0 0个个结结点点的的有有穷穷集集合合D D与与D D上上的的关关系系集集合合R R构构成成的的二二元元组组结结构构。当当n=0n
10、=0时时,称称该该二二叉叉树树为为空空二二叉叉树树;否否则则,称称它它为为包包含含了了一一个个根根结结点点以以及及两两棵棵互互不不相相交交、分分别别称称为为左左子子树树和和右右子树的二叉树。即:子树的二叉树。即:(1)(1)每每个个结结点点至至多多只只有有二二棵棵子子树树(二二叉叉树树中中不不存存在在度大于度大于2 2的结点的结点););(2)(2)二二叉叉树树的的子子树树有有左左右右之之分分,其其次次序序不不能能任任意意颠颠倒。倒。思考思考:二叉树就是与度为:二叉树就是与度为2 2的有序树吗?的有序树吗?5.2 二叉树二叉树ABCDEABCDEABCDE10上述数据的结构是上述数据的结构是递
11、归定义:递归定义:二叉树可以有五种基本形态二叉树可以有五种基本形态:(a)(b)(c)(d)(e)性质1:一棵非空一棵非空二叉树的第二叉树的第i i层上至多有层上至多有2 2i-1i-1(i1)个结点个结点。证明:数学归纳法证明:数学归纳法11性质2:一棵一棵深度为深度为h h的二叉树至多有的二叉树至多有2 2h h-1-1个结点个结点,(,(h h1)1)。证证明:由性质明:由性质1,1,深度为深度为h h的二叉树的最大结点数为:的二叉树的最大结点数为:(第第i i层上的最大结点数层上的最大结点数)性质3:对对于于一一棵棵二二叉叉树树T,T,如如果果其其叶叶子子结结点点数数为为n n0 0,
12、度度为为2 2的结点数为的结点数为n n2 2,则则n n0 0=n=n2 2+1+1。证明:证明:12满二叉树:一棵深度为一棵深度为h h且有且有2 2h h-1-1个结点的二叉树。个结点的二叉树。特点:特点:每个分支都有两个孩子结点,并且所有叶子都每个分支都有两个孩子结点,并且所有叶子都在同一层上。在同一层上。13完全二叉树:对于一棵高上对于一棵高上h h,有,有n n个结点的二叉树,个结点的二叉树,除了除了h h层结点,对于层结点,对于h-1h-1层以及上面的结点组成的树是层以及上面的结点组成的树是满二叉树,对于满二叉树,对于h h层的结点尽可能靠左。层的结点尽可能靠左。14性质4:具有
13、具有 n n个结点的完全二叉树的深度为个结点的完全二叉树的深度为:性质5:对对于于一棵有一棵有n n个结点的完全二叉树个结点的完全二叉树(其深度为其深度为 loglog2 2n n)的结点按的结点按照从上至下,和从左到右的顺序对二照从上至下,和从左到右的顺序对二叉树中的所有结点从叉树中的所有结点从1 1开始编号开始编号,则对任则对任意的序号为意的序号为i i的的结点,有如下性质结点,有如下性质:(1)(1)如果如果i1,i1,则其双亲则其双亲Parent(i)Parent(i)的的结点结点序序号为号为 i/2i/2。(2)(2)如果如果2i2in n,则序号为,则序号为i i的的左孩子结点左孩
14、子结点的序号为的序号为2i2i。如。如果果2in,2in,则则序号为序号为i i的结点的结点无左孩子无左孩子(结点结点i i为叶子结点为叶子结点););(3)(3)如果如果2i+12i+1n n,则序号为,则序号为i i的右的右孩子结点孩子结点的序号为的序号为2i2i+1+1;如果如果2i+1n,2i+1n,则结点则结点i i无右孩子。无右孩子。证明证明:根据根据15二叉树的抽象数据类型定义:ADT BinaryTree ADT BinaryTree 数据对象数据对象D D:D:D是具有相同特性的数据元素的集合是具有相同特性的数据元素的集合 数据关系数据关系R R:若若D=D=,则则R=R=,
15、称称BinaryTreeBinaryTree为空二叉树为空二叉树;若若D D,则则R=H,HR=H,H是如下二元关系是如下二元关系:在在D D中存在唯一的称为根的数据元素中存在唯一的称为根的数据元素root,root,它在关系它在关系H H下无下无前驱前驱;若若D-rootD-root,则存在则存在D-rootD-rootDD1 1,D,Dr r,且且D Dl l D Dr r=若若D D1 1,则则D D1 1中存在唯一的元素中存在唯一的元素x x1 1,root,x,H,H,且存在且存在D Dl l上的关系上的关系H H1 1 H;H;若若D Dr r,则则D Dr r中存在唯一的元素中存
16、在唯一的元素x xr r,root,x,H,H,且且存在存在D Dr r上的关系上的关系H Hr r H;H=root,xH;H=,H,Hl l,H,Hr r;(D(Dl l,H,Hl l)是一棵符合本定义的二叉树是一棵符合本定义的二叉树,称为根的左子树称为根的左子树,(D(Dr r,H,Hr r)是一棵符合本定义的二叉树是一棵符合本定义的二叉树,称为根的右子树。称为根的右子树。16基本操作基本操作:CreateBinaryTree();/CreateBinaryTree();/创建二叉树创建二叉树初始条件:无初始条件:无操作结果:创建一个二叉树操作结果:创建一个二叉树 IsEmpty(T);
17、/IsEmpty(T);/判断二叉树是否为空判断二叉树是否为空初始条件:输入一个树初始条件:输入一个树操作结果:如果该树为空返回操作结果:如果该树为空返回1 1,否则为,否则为0 0 BinaryTreeDepth(T);/BinaryTreeDepth(T);/求二叉树的深度求二叉树的深度(高度高度)初始条件:输入一个树初始条件:输入一个树操作结果:返回该树的深度操作结果:返回该树的深度 NodeValue(T,node);/NodeValue(T,node);/取指定结点的值取指定结点的值初始条件:输入一个树以及指定结点初始条件:输入一个树以及指定结点操作结果:返回结点中的数据操作结果:返
18、回结点中的数据 ParentofNode(T,node);/ParentofNode(T,node);/求指定结点的双亲求指定结点的双亲初始条件:输入树与指定结点初始条件:输入树与指定结点操作结果:返回指定结点操作结果:返回指定结点nodenode的双亲结点的双亲结点 17 LeftChild(T,node);/LeftChild(T,node);/求指定结点的左孩子求指定结点的左孩子初始条件:输入树与指定结点初始条件:输入树与指定结点操作结果:返回指定结点操作结果:返回指定结点nodenode的左孩子的左孩子 RightChild(T,node);/RightChild(T,node);/求
19、指定结点的右孩子求指定结点的右孩子初始条件:输入树与指定结点初始条件:输入树与指定结点操作结果:返回该结点操作结果:返回该结点nodenode的右孩子的右孩子 InsertChild(T,P,LeftOrRight,node);/InsertChild(T,P,LeftOrRight,node);/插入子树插入子树初始条件:输入树、父结点、左或右孩子标识以及指定结点初始条件:输入树、父结点、左或右孩子标识以及指定结点操作结果:将结点操作结果:将结点nodenode插入为插入为T T中中P P所指结点的左或右孩子所指结点的左或右孩子 DeleteChild(T,P,LeftOrRight);/D
20、eleteChild(T,P,LeftOrRight);/删除子树删除子树初始条件:输入树、父结点、左或右孩子标识初始条件:输入树、父结点、左或右孩子标识操作结果:将操作结果:将T T中中P P所指结点的左或右孩子删除,并将删除的所指结点的左或右孩子删除,并将删除的 结点返回结点返回 PreOrderTraverse(T,VISIT);/PreOrderTraverse(T,VISIT);/先序遍历二叉树先序遍历二叉树初始条件:输入树以及访问函数初始条件:输入树以及访问函数操作结果:按照先序方式遍历指定树中的所有结点操作结果:按照先序方式遍历指定树中的所有结点18 InOrderTravers
21、e(T,VISIT);/InOrderTraverse(T,VISIT);/中序遍历二叉树中序遍历二叉树初始条件:输入树以及访问函数初始条件:输入树以及访问函数操作结果:按照中序方式遍历指定树中的所有结点操作结果:按照中序方式遍历指定树中的所有结点 PostOrderTraverse(T,VISIT);/PostOrderTraverse(T,VISIT);/后序遍历二叉树后序遍历二叉树初始条件:输入树以及访问函数初始条件:输入树以及访问函数操作结果:按照后序方式遍历指定树中的所有结点操作结果:按照后序方式遍历指定树中的所有结点 LevelOrderTraverse(T,VISIT);/Lev
22、elOrderTraverse(T,VISIT);/层次遍历二叉树层次遍历二叉树初始条件:输入树以及访问函数初始条件:输入树以及访问函数操作结果:按照层方式遍历指定树中的所有结点操作结果:按照层方式遍历指定树中的所有结点 ADT BinaryTree ADT BinaryTree191.1.顺序存储结构顺序存储结构对于完全二叉树:对于完全二叉树:二、二叉树的存储与实现ABCDEFGHI12345678920n对于非完全二叉树对于非完全二叉树,如果用顺序结构存储如果用顺序结构存储,则应将其每个结则应将其每个结点与完全二叉树上的结点相对照点与完全二叉树上的结点相对照,存储在一维数组的相应分量存储在
23、一维数组的相应分量中中,以以0 或或#表示不存在的结点。表示不存在的结点。例如:例如:在最坏的情况下:单分支二叉树!一个深度为在最坏的情况下:单分支二叉树!一个深度为K K的树却只有的树却只有K K个个结点,即树中不存在度为结点,即树中不存在度为2 2的结点,需要长度为的结点,需要长度为2 2k k-1-1的一维数组的一维数组。ABCDEFG123456789101112131415212.链式存储结构链式存储结构一般有两种形式的链式存储结构:一般有两种形式的链式存储结构:(1)含有两个指针域的结点结构;含有两个指针域的结点结构;(2)含有三个指针域的结点结构。含有三个指针域的结点结构。结点形
24、式结点形式 DataParentleftChildrightChild两个指针域的结点结构两个指针域的结点结构(二叉链表二叉链表)leftChildrightChildData三个指针域的结点结构三个指针域的结点结构(三叉链表三叉链表)leftChildrightChildDataParent22在含有在含有n n个结点的二叉链个结点的二叉链表中有表中有n+1n+1个空链域个空链域 !23/二叉链表结点类型二叉链表结点类型typedef char ElemType;/typedef char ElemType;/设定数据类型设定数据类型 typedef struct BiTreeNode ty
25、pedef struct BiTreeNode ElemType data;ElemType data;struct BiTreeNode*leftChild,*rightChild;struct BiTreeNode*leftChild,*rightChild;BiTNode,*BiTree,*BTNPtr;BiTNode,*BiTree,*BTNPtr;/三叉链表结点类型三叉链表结点类型typedef char ElemType;/typedef char ElemType;/设定数据类型设定数据类型 typedef struct BiTreeNode typedef struct BiT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第五章 第五

限制150内