数据结构第6章树和二叉树.ppt
《数据结构第6章树和二叉树.ppt》由会员分享,可在线阅读,更多相关《数据结构第6章树和二叉树.ppt(42页珍藏版)》请在三一办公上搜索。
1、1,第六章 树和二叉树,6.1 树的类型定义,6.2 二叉树的类型定义和实现,6.3 遍历二叉树和线索二叉树,6.4 树和森林,6.5 Huffman树与Huffman编码,2,对比树型结构和线性结构的结构特点,第一个数据元素(无前驱)最后一个数据元素(无后继)其它数据元素(一个前驱、一个后继),根结点(无前驱)多个叶子结点(无后继)其它数据元素(一个前驱、多个后继),3,6.1 树的类型定义,树 是 n(n 0)个结点的有限集 D,当n 1 时:1)有一个特定的结点 root 被称为根(结点);2)除根以外的结点被分成 m(m 0)个不相交的有限集T1,T2,Tm,其中每个集合又是一棵树,称
2、为根的子树。,4,结点:,结点的度:,树的度:,叶子结点:,分支结点:,数据元素+若干指向子树的分支,分支的个数,树中所有结点的度的最大值,度为零的结点,度大于零的结点,树的基本术语,(从根到结点的)路径:,由从根到该结点所经分支和结点构成,5,孩子结点:结点的子树的根称为该结点的孩子双亲结点:B 结点是A 结点的孩子,则A结点是B结点的双亲兄弟结点:同一双亲的孩子之间互称兄弟堂兄弟结点:其双亲在同一层的结点互称堂兄弟祖先结点:从根到该结点所经分支上的所有结点子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙,6,孩子结点双亲结点兄弟结点堂兄弟结点祖先结点子孙结点,结点的层次:,树的深度
3、:,假设根结点的层次为1,第L层结点的子树的根结点层次为L+1,树中叶子结点所在的最大层次,7,有序树:子树之间存在确定的次序关系。最左边子树的根称为第一个孩子;最右边子树的根称为最后一个孩子。,森林:,是m(m0)棵互不相交的树的集合。,无序树:,不考虑子树的顺序。,8,任何一棵非空树是一个二元组 Tree=(root,F)其中:root 被称为根结点 F 被称为子树森林,森林和树之间的联系:,一棵树去掉根后,其子树构成一个森林;一个森林增加一个根结点成为树。,9,(A(B(E,F(K,L),C(G),D(H,I,J(M),T1,T3,T2,树根,广义表,树的表示方法:层次结构;1)嵌套集合
4、;2)广义表;3)凹入表示法,10,ADT Tree 数据对象D:D是具有相同特性的数据元素的集合。数据关系R:若 D 为空集,则称为空树;若 D 中仅含一个数据元素,则关系R为空集;否则 R=H,(1)在D中存在唯一的称为根的数据元素 root,它在关系H下无前驱;(2)当n1时,其余数据元素可分为 m(m0)个互不相交的(非空)有限集 T1,T2,Tm,其中每一个子集本身又是一棵符合本定义的树,称为根 root 的子树,每一棵子树的根 xi 都是根 root 的后继,即 H,i=1,2,m。,树的抽象数据类型定义如下:,11,基本操作:,结构初始化InitTree(初始条件:树 T 存在。
5、操作结果:销毁树 T。,12,引用型操作TreeEmpty(T);初始条件:树 T 存在。操作结果:若 T 为空树,则返回 TRUE,否则返回 FALSE。TreeDepth(T);初始条件:树 T 存在。操作结果:返回T的深度。Root(T);初始条件:树 T 存在。操作结果:返回 T 的根。,13,Value(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:返回 cur_e 的值。Parent(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:若 cur_e 是T的非根结点,则返回它的 双亲,否则返回“空”。LeftCh
6、ild(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:若 cur_e 是T的非叶子结点,则返回它的最左孩子,否则返回空,14,RightSibling(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,否则返回“空”。TraverseTree(T,visit();初始条件:树T存在,visit 是对结点操作的应用函数 操作结果:按某种次序对 T 的每个结点调用函数visit()一次且至多一次。一旦 visit()失败,则操 作失败。加工型操作Assign(初始条件:树T存在,cur
7、_e 是 T 中某个结点。操作结果:结点 cur_e 赋值为 value。,15,ClearTree(初始条件:树 T 存在,p 指向 T 中某个结点,1ip 指结点的度。操作结果:删除 T 中 p 所指结点的第 i 棵子树。,ADT Tree,16,定义 或为空树,或是由一个根结点和两棵互不相交的左子树、右子树构成,并且左、右子树本身也是二叉树。特性二叉树中每个结点最多有两棵子树;二叉树每个结点的度小于等于2子树有左右之分,不能颠倒有序树二叉树是递归结构,在二叉树的定义中又用到了二叉树的概念,6.2 二叉树的类型定义和实现,17,二叉树与度为2的树相同吗?为什么?,答案:二叉树与度为2的树不
8、相同;1.度为2的树不能为空树,二叉树可以为空树。2.度为2的树从形式上看与二叉树很相似,但它的子树是无序的,而二叉树是有序的。即,在一般树中若某结点只有一个孩子,就无需区分其左右次序,而在二叉树中即使是一个孩子也有左右之分。,18,a、b两棵二叉树相同吗?为什么?,(a),(b),答案:不相同。因为,二叉树是有序树,而a和b两棵二叉树的左右子树不同。,19,二叉树的五种基本形态:,空树,只含根结点,右子树为空树,左子树为空树,左右子树均不为空树,20,二叉树的抽象数据类型定义如下:,ADT BinaryTree 数据对象:D 是具有相同特性的数据元素的集合。数据关系:若D为空集,则称为空树。
9、否则:(1)在D中存在唯一的称为根的数据元素 root;(2)当n 1时,其余结点可分为2个互不相交的有限集T1、T2,其中每一棵子集本身又是一棵符合本定义的二叉树,T1称为根 root 的左子树,T2称为根 root 的右子树。,21,基本操作:,初始化操作,InitBiTree(&T)操作结果:构造空二叉树 T。,DestroyBiTree(初始条件:二叉树 T 存在。操作结果:销毁二叉树 T。,结构销毁操作,CreateBiTree(&T,definition)初始条件:definition 给出二叉树 T 的定义。操作结果:按 definition 构造二叉树 T。,22,引用型操作,
10、Root(T)初始条件:二叉树 T 存在。操作结果:返回二叉树T的根结点。,Parent(T,e)初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:若e是T的非根结点,则返回它的双亲,否则返回“空”。,Value(T,e)初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回e的值。,23,引用型操作(续),LeftChild(T,e)初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的左孩子。若 e 无左孩子,则返回空。,RightChild(T,e)初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的右孩子。若 e 无右孩
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 二叉
链接地址:https://www.31ppt.com/p-6050269.html