数据结构 第6 章 树和二叉树.ppt
《数据结构 第6 章 树和二叉树.ppt》由会员分享,可在线阅读,更多相关《数据结构 第6 章 树和二叉树.ppt(119页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中1、树和森林的概念(树的定义、树的术语、性质、树和森林的概念(树的定义、树的术语、性质 及运算);及运算);2、二叉树的定义、性质及运算;、二叉树的定义、性质及运算;3、二叉树的存储结构(顺序、链式表示);、二叉树的存储结构(顺序、链式表示);4、遍历二叉树、遍历二叉树 5、树的存储结构;树、森林与二叉树的转换;遍、树的存储结构;树、森林与二叉树的转换;遍 历树;遍历森林历树;遍历森林 6、哈夫曼树、哈夫曼编码。、哈
2、夫曼树、哈夫曼编码。教学内容教学内容 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中树型结构(非线性结构)树型结构(非线性结构)结点之间有分支结点之间有分支 具有层次关系具有层次关系 例例 自然界:树自然界:树 人类社会人类社会 家谱家谱 行政组织机构行政组织机构 计算机领域计算机领域 编译:用树表示源程序的语法结构编译:用树表示源程序的语法结构 数据库系统:用树组织信息数据库系统:用树组织信息 算法分析:用树描述执行过程算法分析:用树描述执行过程 国务院国务院 山东省山东省 北京市北京市 西藏自治区西藏自治区 济南市济南市 青岛市青岛市 威海市威海
3、市 历下区历下区 市中区市中区 商河县商河县 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中6.1 树的定义和基本术语树的定义和基本术语 定义:定义:树树(Tree)是是 n(n0)个结点的有限集。个结点的有限集。若若 n=0,称称 为空树;为空树;若若 n 0,则则它满足如下两个条件:它满足如下两个条件:(1)有且仅有一个特定的称为有且仅有一个特定的称为根根根根(Root)的结点;的结点;(2)其余结点可分为其余结点可分为 m(m0)个互不相交的有限集个互不相交的有限集 T1,T2,T3,Tm,其中每一个集合本身又是一棵树,并称为其中每一个集合本身
4、又是一棵树,并称为 根的根的子树子树(SubTree)。显然,树的定义是一个递归的定义。显然,树的定义是一个递归的定义。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中树的逻辑结构:树的逻辑结构:树的逻辑结构:树的逻辑结构:树中任一结点都可以有零个或多个直接后继结点树中任一结点都可以有零个或多个直接后继结点 但至多只能有一个直接前趋结点。但至多只能有一个直接前趋结点。T3 T2 T1 基本术语:基本术语:结点的结点的度:度:度:度:结点拥有的子树数。结点拥有的子树数。度度=0叶子叶子叶子叶子 终端结点终端结点终端结点终端结点 度度 0分支结点分支结点分
5、支结点分支结点 非终端非终端非终端非终端 结点结点结点结点 根结点以根结点以 外的分支外的分支 结点称为结点称为 内部结点内部结点内部结点内部结点 树的树的度:度:度:度:树内各结点的度的最大值。树内各结点的度的最大值。双亲双亲 孩子孩子 兄弟兄弟 结点的结点的祖先:祖先:祖先:祖先:从根到该结点所经分支上的所有结点。从根到该结点所经分支上的所有结点。结点的结点的子孙:子孙:子孙:子孙:以某结点为根的子树中的任一结点。以某结点为根的子树中的任一结点。第第 1 层层 第第 2 层层 第第 3 层层 第第 4 层层 堂兄弟堂兄弟 双亲在同一层的结点双亲在同一层的结点 树的树的深度:深度:深度:深度
6、:树中结点的最大层次。树中结点的最大层次。有序树:有序树:有序树:有序树:树中结点的各子树从左至右有次序(最左边的为第一个孩子)。树中结点的各子树从左至右有次序(最左边的为第一个孩子)。无序树:无序树:无序树:无序树:树中结点的各子树无次序。树中结点的各子树无次序。结点:结点:数据元素数据元素+指向子树的分支指向子树的分支 根结点:根结点:非空树中无前驱结点的结点非空树中无前驱结点的结点 森林:森林:森林:森林:是是 m(m0)棵互不相交的树的集合。棵互不相交的树的集合。一棵树可以看成是一个特殊的森林。一棵树可以看成是一个特殊的森林。把根结点删除树就变成了森林。把根结点删除树就变成了森林。给森
7、林中的各子树加上一个双亲结点,森林就变成了树。给森林中的各子树加上一个双亲结点,森林就变成了树。树树 森林森林 一定是一定是 不一定是不一定是 E F G H I A B C D J K L M 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 树的逻辑结构描述树的逻辑结构描述 一棵树的逻辑结构可以用二元组描述为:一棵树的逻辑结构可以用二元组描述为:Tree=(root,F)数据元素数据元素 根结点根结点 包含包含 m(m0)棵树的森林棵树的森林 F=(T1,T2,Tm)Ti=(ri,Fi)Ti 称做称做根根 root 的第的第 i 棵子树。棵子树。当
8、当 m0 时,在树根和其子树森林之间存在下列关系:时,在树根和其子树森林之间存在下列关系:RF=|i=1,2,m,m 0数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中RF=,Tree=(A,F)F=(T1,T2,T3)T1=(B,F1)T2=(C,F2)T3=(D,F3)r1F1=,r2F2=r3F3=,E F G H I A B C D J K L M 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 树的抽象数据类型定义:树的抽象数据类型定义:ADT Tree 数据对象数据对象 D:D 是具有相同特性的数
9、据元素的集合。是具有相同特性的数据元素的集合。数据关系数据关系 R:(:(略)略)基本操作基本操作 P:结构初始化结构初始化结构初始化结构初始化 InitTree(&T);操作结果:操作结果:构造空树构造空树 T。CreateTree(&T,definition);初始条件:初始条件:definition 给出树给出树 T 的定义。的定义。操作结果:操作结果:按按 definition 构造树构造树 T。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 销毁销毁销毁销毁结构结构结构结构 DestroyTree(&T);初始条件:初始条件:树树 T 存在
10、存在。操作结果:操作结果:销毁树销毁树 T。引用型操作引用型操作引用型操作引用型操作 TreeEmpty(T)初始条件:初始条件:树树 T 存在。存在。操作结果:操作结果:若若 T 为空树,则返回为空树,则返回 TURE,否则否则 FALSE。TreeDepth(T)初始条件:初始条件:树树 T 存在。存在。操作结果:操作结果:返回返回 T 的深度。的深度。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中Root(T)初始条件:初始条件:树树 T 存在存在。操作结果:操作结果:返回返回 T 的根的根。Value(T,cur_e);初始条件:初始条件:树
11、树 T 存在,存在,cur_e 是是 T 中某个结点中某个结点。操作结果:操作结果:返回返回 cur_e 的值的值。Assign(T,cur_e,value)初始条件:初始条件:树树 T 存在,存在,cur_e 是是 T 中某个结点。中某个结点。操作结果:操作结果:结点结点 cur_e 赋值为赋值为 value。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 Parent(T,cur_e)初始条件:初始条件:树树 T 存在,存在,cur_e 是是 T 中某个结点。中某个结点。操作结果:操作结果:若若 cur_e 是是 T 的非根结点,则返回它的双的非
12、根结点,则返回它的双 亲,否则函数值为亲,否则函数值为“空空”。LeftChild(T,cur_e)初始条件:初始条件:树树 T 存在,存在,cur_e 是是 T 中某个结点。中某个结点。操作结果:操作结果:若若 cur_e 是是 T 的非叶子结点,则返回它的的非叶子结点,则返回它的 最左孩子,否则返回最左孩子,否则返回“空空”。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中RightSibling(T,cur_e)初始条件:初始条件:树树 T 存在,存在,cur_e 是是 T 中某个结点。中某个结点。操作结果:操作结果:若若 cur_e 有右兄弟,
13、则返回它的右兄弟,有右兄弟,则返回它的右兄弟,否则函数值为否则函数值为“空空”。TraverseTree(T,Visit();初始条件:初始条件:树树 T 存在,存在,Visit 是对结点操作的函数。是对结点操作的函数。操作结果:操作结果:按某种次序对按某种次序对 T 的每个结点调用函数的每个结点调用函数 Visit()一次且至多一次。一旦一次且至多一次。一旦 Visit()失败,则操作失败。失败,则操作失败。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中加工型操作加工型操作加工型操作加工型操作 ClearTree(&T);初始条件:初始条件:树树
14、T 存在。存在。操作结果:操作结果:将树将树 T 清为空树。清为空树。InsertChild(&T,&p,i,c);初始条件:初始条件:树树 T 存在,存在,p 指向指向 T 中某个结点,中某个结点,1ip 所指结点的度所指结点的度+1,非空树,非空树 c 与与 T 不相交。不相交。操作结果:操作结果:插入插入 c 为为 T 中中 p 指结点的第指结点的第 i 棵子树。棵子树。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 DeleteChild(&T,&p,i);初始条件:初始条件:树树 T 存在,存在,p 指向指向 T 中某个结点,中某个结点,1
15、ip 所指结点的度。所指结点的度。操作结果:操作结果:删除删除 T 中中 p 所指结点的第所指结点的第 i 棵子树。棵子树。ADT Tree 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 树的表示形式树的表示形式 1树形表示法树形表示法 A 空树空树 A B 仅含有根结点的树仅含有根结点的树 2嵌套集合(文氏)表示法嵌套集合(文氏)表示法 ABEFK LDHIMJCG E F G H I A B C D J K L M 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中3凹入表示法凹入表示法 A B E K
16、L F C G D H M I J 4广义表表示法广义表表示法 E F G H I A B C D J K L M(A(A(B(E(K,L),F),C(G),D(H(M),I,J)数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中6.2 二叉树二叉树 二叉树在树结构的应用中起着非常重要的作用,因为对二叉二叉树在树结构的应用中起着非常重要的作用,因为对二叉 树的许多操作算法简单,而任何树都可以与二叉树相互转换,这树的许多操作算法简单,而任何树都可以与二叉树相互转换,这 样就解决了树的存储结构及其运算中存在的复杂性。样就解决了树的存储结构及其运算中存在的复杂
17、性。6.2.1 二叉树的定义二叉树的定义 二叉树是二叉树是 n(n0)个结点的有限集,它或者是个结点的有限集,它或者是空集空集(n=0),或者由一个或者由一个根结点根结点及及两棵互不相交两棵互不相交的的 分别称作这个根的分别称作这个根的左子树左子树和和右子树右子树的二叉树组成。的二叉树组成。定义定义 特点特点 1、每个结点最多有俩孩子、每个结点最多有俩孩子(二叉树中不存在度大于二叉树中不存在度大于二叉树中不存在度大于二叉树中不存在度大于 2 2 的结点的结点的结点的结点)。2、子树有左右之分,其次序不能颠倒。、子树有左右之分,其次序不能颠倒。3、二叉树可以是空集合,根可以有空的左子树或空的右子
18、树。、二叉树可以是空集合,根可以有空的左子树或空的右子树。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 二叉树二叉树结点的子树要区分左子树和右子树,即使只有一棵子结点的子树要区分左子树和右子树,即使只有一棵子 树也要进行区分,说明它是左子树,还是右子树。树树也要进行区分,说明它是左子树,还是右子树。树当结点只有当结点只有 一个孩子时,就无须区分它是左还是右的次序。(一个孩子时,就无须区分它是左还是右的次序。(也就是二叉树也就是二叉树 每个结点位置或者说次序都是固定的,可以是空,但是不可以说每个结点位置或者说次序都是固定的,可以是空,但是不可以说 它
19、没有位置,而树的结点位置是相对于别的结点来说的,没有别它没有位置,而树的结点位置是相对于别的结点来说的,没有别 的结点时,它就无所谓左右了)的结点时,它就无所谓左右了),因此二者是不同的。,因此二者是不同的。这是二叉这是二叉 树与树的最主要的差别。树与树的最主要的差别。二二叉叉树树不是不是不是不是树的特殊情况,它们是两个概念。树的特殊情况,它们是两个概念。注注 A B 具有两个结点的树只有一种状态具有两个结点的树只有一种状态 A B A B 具有两个结点的二叉树有两种状态具有两个结点的二叉树有两种状态 数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中
20、二叉树的二叉树的 5 种基本形态种基本形态 (a)空二叉空二叉树树(b)根和空的根和空的 左右子树左右子树(c)根和左子树根和左子树(d)根和右子树根和右子树 (e)根和左右子树根和左右子树 注:虽然二叉树与树概念不同,注:虽然二叉树与树概念不同,但有关树的基本术语对二叉树都适用。但有关树的基本术语对二叉树都适用。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中二叉树的抽象数据类型定义:二叉树的抽象数据类型定义:ADT BinaryTree 数据对象数据对象 D:D 是具有相同特性的数据元素的集合。是具有相同特性的数据元素的集合。数据关系数据关系 R:
21、(略)略)基本操作基本操作 P:结构初始化结构初始化结构初始化结构初始化InitBiTree(&T);操作结果:操作结果:构造空二叉树构造空二叉树 T。CreateBiTree(&T,definition);初始条件:初始条件:definition 给出二叉树给出二叉树 T 的定义。的定义。操作结果:操作结果:按按 definition 构造二叉树构造二叉树 T。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 销毁结构销毁结构销毁结构销毁结构DestroyBiTree(&T);初始条件:初始条件:二叉树二叉树 T 存在。存在。操作结果:操作结果:销毁
22、二叉树销毁二叉树 T。引用型操作引用型操作引用型操作引用型操作BiTreeEmpty(T);初始条件:初始条件:二叉树二叉树 T 存在存在。操作结果:操作结果:若若 T 为空二叉树,则返回为空二叉树,则返回 TRUE,否则返回否则返回 FALSE。BiTreeDepth(T);初始条件:初始条件:二叉树二叉树 T 存在存在。操作结果:操作结果:返回返回 T 的深度的深度。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 Root(T);初始条件:初始条件:二叉树二叉树 T 存在。存在。操作结果:操作结果:返回返回 T 的根。的根。Value(T,e);
23、初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 中某个结点。中某个结点。操作结果:操作结果:返回返回 e 的值。的值。Parent(T,e);初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 中某个结点。中某个结点。操作结果:操作结果:若若 e 是是 T 的非根结点,则返回它的双亲,的非根结点,则返回它的双亲,否则返回否则返回“空空”。LeftChild(T,e);初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 中某个结点。中某个结点。操作结果:操作结果:返回返回 e 的左孩子。若的左孩子。若 e 无左孩子则返回无左孩子则返回“空空”。数据结构数据
24、结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中 RightChild(T,e);初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 中某个结点。中某个结点。操作结果:操作结果:返回返回 e 的右孩子。若的右孩子。若 e 无右孩子则返回无右孩子则返回“空空”。LeftSibling(T,e);初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 中某个结点。中某个结点。操作结果:操作结果:返回返回 e 的左兄弟。若的左兄弟。若 e 是其双亲的左孩子或是其双亲的左孩子或 无左兄弟,则返回无左兄弟,则返回“空空”。RightSibling(T,e
25、);初始条件:初始条件:二叉树二叉树 T 存在,存在,e 是是 T 的结点。的结点。操作结果:操作结果:返回返回 e 的右兄弟。若的右兄弟。若 e 是其双亲的右孩子或是其双亲的右孩子或 无右兄弟,则返回无右兄弟,则返回“空空”。数据结构数据结构 第六章第六章 树和二叉树树和二叉树制作:制作:计算机科学与技术系 徐振中PreOrderTraverse(T,visit();初始条件:初始条件:二叉树二叉树 T 存在,存在,visit 是对结点操作的应用函数。是对结点操作的应用函数。操作结果:操作结果:先序遍历先序遍历先序遍历先序遍历 T,对每个结点调用函数对每个结点调用函数 visit 一次一次
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第6 树和二叉树 二叉
限制150内