数据结构 第六章 树和二叉树精品文稿.ppt
《数据结构 第六章 树和二叉树精品文稿.ppt》由会员分享,可在线阅读,更多相关《数据结构 第六章 树和二叉树精品文稿.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构数据结构第六章第六章树树和二叉树和二叉树第1页,本讲稿共62页第一节第一节树的类型定义树的类型定义A为为“根根”T1、T2和和T3都是一棵树,称为都是一棵树,称为A的的子树子树。称根和子树根之间的连线为称根和子树根之间的连线为“分支分支”结点分支的个数定义为结点分支的个数定义为“结点的度结点的度”,如结点,如结点B的度为的度为2,D的度为的度为3。树中所有结点度的最大值定义为树中所有结点度的最大值定义为“树的度树的度”。称度为零的结点为称度为零的结点为“叶子叶子”或或“终端结点终端结点”所有度不为零的结点所有度不为零的结点被称作被称作分支结点分支结点第2页,本讲稿共62页基本定义基本定
2、义森林森林为为m(m0)棵互不相交的树的集合。棵互不相交的树的集合。树的深度树的深度定义为树中叶子结点所在最大层次数。定义为树中叶子结点所在最大层次数。称根结点为子树根的称根结点为子树根的双亲双亲。称子树根为根结点的称子树根为根结点的孩子孩子“根的所有子树根互为根的所有子树根互为“兄弟兄弟”。有序树、无序树有序树、无序树如果树中如果树中每棵子树从左向右的排列拥有每棵子树从左向右的排列拥有一定的顺序,不得互换,则称一定的顺序,不得互换,则称为有序树,否则称为无序树。为有序树,否则称为无序树。第3页,本讲稿共62页树的抽象数据类型:树的抽象数据类型:ADTTree数据对象数据对象:D是具有相同特性
3、的数据元素的集合。是具有相同特性的数据元素的集合。数据关系数据关系:若若D为空集,则称为为空集,则称为空树空树;若若D中仅含一个数据元素,则关系中仅含一个数据元素,则关系R为空集;为空集;否则否则R=H,(1)在在D中存在唯一的称为中存在唯一的称为根根的数据元素的数据元素root,它在关系,它在关系H下无前驱;下无前驱;(2)当当n1时,其余数据元素可分为时,其余数据元素可分为m(m0)个互不个互不相交的相交的(非空非空)有限集有限集T1,T2,Tm,其中每一个子集本身又是其中每一个子集本身又是一棵符合本定义的树,称为根一棵符合本定义的树,称为根root的的子树子树,每一棵子树的根,每一棵子树
4、的根xi都是根都是根root的后继,即的后继,即H,i=1,2,m。第4页,本讲稿共62页基本操作基本操作:结构初始化结构初始化InitTree(&T);操作结果:构造空树操作结果:构造空树T。CreateTree(&T,definition);初始条件:初始条件:definition给出树给出树T的定义。的定义。操作结果:按操作结果:按definition构造树构造树T。销毁结构销毁结构DestroyTree(&T);初始条件:树初始条件:树T存在。存在。操作结果:销毁树操作结果:销毁树T。第5页,本讲稿共62页引用型操作引用型操作TreeEmpty(T);初始条件:树初始条件:树T存在。存
5、在。操作结果:若操作结果:若T为空树,则返回为空树,则返回TRUE,否则返,否则返回回FALSE。TreeDepth(T);初始条件:树初始条件:树T存在。存在。操作结果:返回操作结果:返回T的的深度深度。Root(T);初始条件:树初始条件:树T存在。存在。操作结果:返回操作结果:返回T的根。的根。Value(T,cur_e);初始条件:树初始条件:树T存在,存在,cur_e是是T中某个结点。中某个结点。操作结果:返回操作结果:返回cur_e的值。的值。第6页,本讲稿共62页Parent(T,cur_e);初始条件:树初始条件:树T存在,存在,cur_e是是T中某个结点。中某个结点。操作结果
6、:若操作结果:若cur_e是是T的非根结点,则返回它的的非根结点,则返回它的双亲双亲,否则返回,否则返回空空。LeftChild(T,cur_e);初始条件:树初始条件:树T存在,存在,cur_e是是T中某个结点。中某个结点。操作结果:若操作结果:若cur_e是是T的非叶子结点,则返回它的最的非叶子结点,则返回它的最左孩子左孩子,否,否则返回则返回空空。RightSibling(T,cur_e);初始条件:树初始条件:树T存在,存在,cur_e是是T中某个结点。中某个结点。操作结果:若操作结果:若cur_e有右兄弟,则返回它的有右兄弟,则返回它的右兄弟右兄弟,否则返回,否则返回空空。Trave
7、rseTree(T,visit();初始条件:树初始条件:树T存在,存在,visit是对结点操作的应用函数。是对结点操作的应用函数。操作结果:按某种次序对操作结果:按某种次序对T的每个结点调用函数的每个结点调用函数visit()一次且至一次且至多一次。一旦多一次。一旦visit()失败,则操作失败。失败,则操作失败。第7页,本讲稿共62页加工型操作加工型操作Assign(T,cur_e,value);初始条件:树初始条件:树T存在,存在,cur_e是是T中某个结点。中某个结点。操作结果:结点操作结果:结点cur_e赋值为赋值为value。ClearTree(&T);初始条件:树初始条件:树T存
8、在。存在。操作结果:将树操作结果:将树T清为空树清为空树。InsertChild(&T,&p,i,c);初始条件:树初始条件:树T存在,存在,p指向指向T中某个结点,中某个结点,1ip所指结点的所指结点的度度1,非空树,非空树c与与T不相交。不相交。操作结果:操作结果:插入插入c为为T中中p所指结点的第所指结点的第i棵子树。棵子树。DeleteChild(&T,&p,i);初始条件:树初始条件:树T存在,存在,p指向指向T中某个结点,中某个结点,1ip指结点的度。指结点的度。操作结果:操作结果:删除删除T中中p所指结点的第所指结点的第i棵子树。棵子树。ADTTree第8页,本讲稿共62页树和线
9、性结构对照:树和线性结构对照:第9页,本讲稿共62页第二节第二节二叉树类型二叉树类型定义:定义:二叉树二叉树是另一种树形结构。它与树形是另一种树形结构。它与树形结构的区别是:结构的区别是:(1)每个结点最多有两棵子树;)每个结点最多有两棵子树;(2)子树有左右之分。)子树有左右之分。二叉树也可以用递归的形式定义。二叉树也可以用递归的形式定义。即:二叉树是即:二叉树是n(n0)个结点的有限集合。)个结点的有限集合。当当n=0时,称为时,称为空二叉树空二叉树;当;当n0时,有且时,有且仅有一个结点为二叉树的仅有一个结点为二叉树的根根,其余结点被分,其余结点被分成两个互不相交的子集,一个作为成两个互
10、不相交的子集,一个作为左子集左子集,另一个作为另一个作为右子集右子集,每个子集又是一个二叉,每个子集又是一个二叉树。树。第10页,本讲稿共62页二叉树的5种形态:(a)(b)(c)(d)(e)第11页,本讲稿共62页6.2.1二叉树的类型定义二叉树的类型定义ADTBinaryTree数据对象数据对象:D是具有相同特性的数据元素的集合。是具有相同特性的数据元素的集合。数据关系数据关系:若若D为空集,称为空集,称BinaryTree为为空二叉树空二叉树;否则否则关系关系R=H:(1)在在D中存在唯一的称为中存在唯一的称为根根的数据元素的数据元素root,它在关系它在关系H下无前驱;下无前驱;(2)
11、D中其余元素中其余元素必可分为必可分为两个互不相交的子集两个互不相交的子集L和和R,每一个子集都是一棵符合本定义的二叉树,并分,每一个子集都是一棵符合本定义的二叉树,并分别为别为root的的左子树左子树和和右子树右子树。如果左子树。如果左子树L不空,则必不空,则必存在一个根结点存在一个根结点,它是,它是root的的左后继左后继(H),如果右子树如果右子树R不空,则必存在一个根结点不空,则必存在一个根结点为为root的的右右后继后继(H)。第12页,本讲稿共62页第13页,本讲稿共62页基本操作基本操作P:结构初始化结构初始化InitBiTree(&T);操作结果:构造操作结果:构造空空二叉树二
12、叉树T。CreateBiTree(&T,definition);初始条件:初始条件:definition给出二叉树给出二叉树T的定义。的定义。操作结果:按操作结果:按definition构造二叉树构造二叉树T。销毁结构销毁结构DestroyBiTree(&T);初始条件:二叉树初始条件:二叉树T存在。存在。操作结果:销毁二叉树操作结果:销毁二叉树T。第14页,本讲稿共62页引用型操作引用型操作BiTreeEmpty(T);初始条件:二叉树初始条件:二叉树T存在。存在。操作结果:若操作结果:若T为空二叉树,则返回为空二叉树,则返回TRUE,否则返回,否则返回FALSE。BiTreeDepth(T
13、);初始条件:二叉树初始条件:二叉树T存在。存在。操作结果:返回操作结果:返回T的深度。的深度。Root(T);初始条件:二叉树初始条件:二叉树T存在。存在。操作结果:返回操作结果:返回T的根。的根。Value(T,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:返回操作结果:返回e的值。的值。第15页,本讲稿共62页Parent(T,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:若操作结果:若e是是T的非根结点,则返回它的双亲,否的非根结点,则返回它的双亲,否则返回则返回空空。LeftChild(T
14、,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:返回操作结果:返回e的的左孩子左孩子。若。若e无左孩子,则返回无左孩子,则返回空空。RightChild(T,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:返回操作结果:返回e的的右孩子右孩子。若。若e无右孩子,则返回无右孩子,则返回空空。LeftSibling(T,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:返回操作结果:返回e的的左兄弟左兄弟。若。若e是其双亲的左孩子或是其双亲的左孩子或无左兄弟,则
15、返回无左兄弟,则返回空空。第16页,本讲稿共62页RightSibling(T,e);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T的结点。的结点。操作结果:返回操作结果:返回e的的右兄弟右兄弟。若。若e是其双亲的右孩子或无右兄弟,则是其双亲的右孩子或无右兄弟,则返回返回空空。PreOrderTraverse(T,visit();初始条件:二叉树初始条件:二叉树T存在存在,visit是对结点操作的应用函数。是对结点操作的应用函数。操作结果:操作结果:先序遍历先序遍历T,对每个结点调用函数,对每个结点调用函数visit一次且仅一次。一次且仅一次。一旦一旦visit()失败,则操作失败。失
16、败,则操作失败。InOrderTraverse(T,vsit();初始条件:二叉树初始条件:二叉树T存在,存在,visit是对结点操作的应用函数。是对结点操作的应用函数。操作结果:操作结果:中序遍历中序遍历T,对每个结点调用函数,对每个结点调用函数Visit一次且仅一次。一次且仅一次。一旦一旦visit()失败,则操作失败。失败,则操作失败。PostOrderTraverse(T,visit();初始条件:二叉树初始条件:二叉树T存在,存在,visit是对结点操作的应用函数。是对结点操作的应用函数。操作结果:操作结果:后序遍历后序遍历T,对每个结点调用函数,对每个结点调用函数visit一次且仅
17、一次。一次且仅一次。一旦一旦visit()失败,则操作失败。失败,则操作失败。第17页,本讲稿共62页LevelOrderTraverse(T,visit();初始条件:二叉树初始条件:二叉树T存在,存在,visit是对结点操作的应用是对结点操作的应用函数。函数。操作结果:操作结果:层序遍历层序遍历T,对每个结点调用函数,对每个结点调用函数visit一一次且仅一次。一旦次且仅一次。一旦visit()失败,则操作失败。失败,则操作失败。加工型操作加工型操作ClearBiTree(&T);初始条件:二叉树初始条件:二叉树T存在。存在。操作结果:将二叉树操作结果:将二叉树T清为空树清为空树。Assi
18、gn(&T,&e,value);初始条件:二叉树初始条件:二叉树T存在,存在,e是是T中某个结点。中某个结点。操作结果:结点操作结果:结点e赋值为赋值为value。第18页,本讲稿共62页InsertChild(&T,p,LR,c);初始条件:二叉树初始条件:二叉树T存在,存在,p指向指向T中某个结点,中某个结点,LR为为0或或1,非空二叉树,非空二叉树c 与与 T 不相交且右子树为空。不相交且右子树为空。操作结果:操作结果:根据根据LR为为0或或1,插入,插入c为为T中中p所所指结点的左或右子树。指结点的左或右子树。p所指结点原有左或右子树成为所指结点原有左或右子树成为c的的右子树。右子树。
19、DeleteChild(&T,p,LR);初始条件:二叉树初始条件:二叉树T存在,存在,p指向指向T中某个结点,中某个结点,LR为为0或或1。操作结果:根据操作结果:根据LR为为0或或1,删除,删除T中中p所指结点的所指结点的左或右子树。左或右子树。ADTBinaryTree第19页,本讲稿共62页6.2.2二叉树的几个特性二叉树的几个特性一、在二叉树的第一、在二叉树的第i层上至多有层上至多有2i-1个结点个结点(i1)。二、深度为二、深度为k的二叉树中至多含有的二叉树中至多含有2k-1个结点,个结点,(k1)。三、对任何一棵二叉树三、对任何一棵二叉树T,如果其终端结点数,如果其终端结点数为为
20、n0,度为,度为2的结点数为的结点数为n2,则,则n0=n2+1第20页,本讲稿共62页若二叉树中所有的分支结点的度数都为若二叉树中所有的分支结点的度数都为2,且,且叶子结点都在同一层次上,则称这类二叉树为叶子结点都在同一层次上,则称这类二叉树为满二叉树满二叉树。假如一棵包含假如一棵包含n个结点的二叉树中每个结点个结点的二叉树中每个结点都可以和满二叉树中编号为都可以和满二叉树中编号为1至至n的结点一、的结点一、一对应,则称这类二叉树为一对应,则称这类二叉树为完全二叉树完全二叉树。第21页,本讲稿共62页第22页,本讲稿共62页第三节第三节二叉树的存储表示二叉树的存储表示6.3.1顺序存储结构顺
21、序存储结构二叉树的顺序存储结构的定义如下:二叉树的顺序存储结构的定义如下:constMAXSIZE=100;/暂定二叉树中结点数的最大值为暂定二叉树中结点数的最大值为100typedefstructElemType*data;/存储空间基址存储空间基址(初始化时分配空间初始化时分配空间)intnodeNum;/二叉树中结点数二叉树中结点数SqBiTree;/二叉树的顺序存储结构二叉树的顺序存储结构第23页,本讲稿共62页6.3.2链式存储结构链式存储结构二叉树的二叉链表存储表示二叉树的二叉链表存储表示typedefstructBiTNodeElemTypedata;structBiTNode*
22、Lchild,*Rchild;/左、右孩子指针左、右孩子指针*BiTree;第24页,本讲稿共62页二叉树的三叉链表存储表示二叉树的三叉链表存储表示typedefstructTriTNodeElemTypedata;structBiTNode*Lchild,*Rchild;/左、右孩子指针左、右孩子指针structBiTNode*parent;/双亲指针双亲指针*TriTree;第25页,本讲稿共62页二叉树的双亲链表存储表示二叉树的双亲链表存储表示typedefstructBPTNode/结点结构结点结构ElemTypedata;int*parent;/指向双亲的指针指向双亲的指针charL
23、RTag;/左、右孩子标志域左、右孩子标志域BPTNode第26页,本讲稿共62页第四节第四节二叉树的遍历二叉树的遍历“遍历遍历”的含义是对结构中的每个数据元的含义是对结构中的每个数据元素都访问一次且仅仅访问一次。素都访问一次且仅仅访问一次。由于二叉树中每个结点都有两个后继,则由于二叉树中每个结点都有两个后继,则可以有三条搜索路径:可以有三条搜索路径:1)先先左左(子树子树)后后右右(子树子树);2)先先右右(子树子树)后后左左(子树子树);3)按层次从上到下。按层次从上到下。第27页,本讲稿共62页6.4.1先左后右的遍历先左后右的遍历6-4-1遍历遍历.swf第28页,本讲稿共62页G H
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六章 树和二叉树精品文稿 第六 二叉 精品 文稿
限制150内