数据结构第六章树和二叉树.ppt
《数据结构第六章树和二叉树.ppt》由会员分享,可在线阅读,更多相关《数据结构第六章树和二叉树.ppt(62页珍藏版)》请在三一办公上搜索。
1、,第六章 树和二叉树,第一节 树的类型定义,A 为“根”T1、T2和T3都是一棵树,称为A的子树。称根和子树根之间的连线为“分支”结点分支的个数定义为“结点的度”,如结点B的度为2,D 的度为3。树中所有结点度的最大值定义为“树的度”。称度为零的结点为“叶子”或“终端结点”所有度不为零的结点被称作分支结点,基本定义,森林为 m(m0)棵互不相交的树的集合。树的深度定义为树中叶子结点所在最大层次数。称根结点为子树根的双亲。称子树根为根结点的孩子“根的所有子树根互为“兄弟”。有序树、无序树 如果树中每棵子树从左向右的排列拥有一定的顺序,不得互换,则称为有序树,否则称为无序树。,树的抽象数据类型:,
2、ADT Tree 数据对象:D是具有相同特性的数据元素的集合。数据关系:若 D 为空集,则称为空树;若 D 中仅含一个数据元素,则关系R为空集;否则 R=H,(1)在D中存在唯一的称为根的数据元素 root,它在关系H下无前驱;(2)当n1时,其余数据元素可分为 m(m0)个互不相交的(非空)有限集 T1,T2,Tm,其中每一个子集本身又是一棵符合本定义的树,称为根 root 的子树,每一棵子树的根 xi 都是根 root 的后继,即 H,i=1,2,m。,基本操作:结构初始化InitTree(初始条件:树 T 存在。操作结果:销毁树 T。,引用型操作TreeEmpty(T);初始条件:树 T
3、 存在。操作结果:若 T 为空树,则返回 TRUE,否则返回 FALSE。TreeDepth(T);初始条件:树T存在。操作结果:返回T的深度。Root(T);初始条件:树 T 存在。操作结果:返回 T 的根。Value(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:返回 cur_e 的值。,Parent(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:若 cur_e 是T的非根结点,则返回它的双亲,否则返回空。LeftChild(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:若 c
4、ur_e 是T的非叶子结点,则返回它的最左孩子,否则返回空。RightSibling(T,cur_e);初始条件:树 T 存在,cur_e 是 T 中某个结点。操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,否则返回空。TraverseTree(T,visit();初始条件:树T存在,visit 是对结点操作的应用函数。操作结果:按某种次序对 T 的每个结点调用函数 visit()一次且至多一次。一旦 visit()失败,则操作失败。,加工型操作Assign(T,cur_e,value);初始条件:树T存在,cur_e 是 T 中某个结点。操作结果:结点 cur_e 赋值为 value。
5、ClearTree(初始条件:树 T 存在,p 指向 T 中某个结点,1ip 指结点的度。操作结果:删除 T 中 p 所指结点的第 i 棵子树。ADT Tree,树和线性结构对照:,第二节 二叉树类型,定义:二叉树是另一种树形结构。它与树形结构的区别是:(1)每个结点最多有两棵子树;(2)子树有左右之分。二叉树也可以用递归的形式定义。即:二叉树是n(n0)个结点的有限集合。当n=0时,称为空二叉树;当n0时,有且仅有一个结点为二叉树的根,其余结点被分成两个互不相交的子集,一个作为左子集,另一个作为右子集,每个子集又是一个二叉树。,二叉树的5种形态:,(a),(b),(c),(d),(e),6.
6、2.1 二叉树的类型定义,ADT BinaryTree 数据对象:D 是具有相同特性的数据元素的集合。数据关系:若 D 为空集,称 BinaryTree 为空二叉树;否则 关系 R=H:(1)在 D 中存在唯一的称为根的数据元素 root,它在关系 H 下无前驱;(2)D 中其余元素必可分为两个互不相交的子集 L 和 R,每一个子集都是一棵符合本定义的二叉树,并分别为 root 的左子树和右子树。如果左子树 L 不空,则必存在一个根结点,它是 root 的左后继(H),如果右子树 R 不空,则必存在一个根结点 为 root 的右后继(H)。,基本操作P:结构初始化InitBiTree(初始条件
7、:二叉树 T 存在。操作结果:销毁二叉树 T。,引用型操作BiTreeEmpty(T);初始条件:二叉树 T 存在。操作结果:若T为空二叉树,则返回 TRUE,否则返回 FALSE。BiTreeDepth(T);初始条件:二叉树 T 存在。操作结果:返回 T 的深度。Root(T);初始条件:二叉树 T 存在。操作结果:返回 T 的根。Value(T,e);初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的值。,Parent(T,e);初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:若e是T的非根结点,则返回它的双亲,否则返回空。LeftChild(T,e
8、);初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的左孩子。若 e 无左孩子,则返回空。RightChild(T,e);初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的右孩子。若 e 无右孩子,则返回空。LeftSibling(T,e);初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:返回 e 的左兄弟。若 e 是其双亲的左孩子或无左兄弟,则返回空。,RightSibling(T,e);初始条件:二叉树 T 存在,e 是 T 的结点。操作结果:返回 e 的右兄弟。若 e 是其双亲的右孩子或无右兄弟,则返回空。PreOrderTr
9、averse(T,visit();初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。操作结果:先序遍历 T,对每个结点调用函数 visit 一次且仅一次。一旦 visit()失败,则操作失败。InOrderTraverse(T,vsit();初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。操作结果:中序遍历 T,对每个结点调用函数 Visit 一次且仅一次。一旦 visit()失败,则操作失败。PostOrderTraverse(T,visit();初始条件:二叉树T存在,visit 是对结点操作的应用函数。操作结果:后序遍历 T,对每个结点调用函数 visit
10、一次且仅一次。一旦 visit()失败,则操作失败。,LevelOrderTraverse(T,visit();初始条件:二叉树 T 存在,visit 是对结点操作的应用函数。操作结果:层序遍历 T,对每个结点调用函数 visit 一次且仅一次。一旦 visit()失败,则操作失败。加工型操作ClearBiTree(初始条件:二叉树 T 存在,e 是 T 中某个结点。操作结果:结点 e 赋值为 value。,InsertChild(初始条件:二叉树 T 存在,p 指向 T 中某个结点,LR 为 0 或 1。操作结果:根据 LR 为 0 或 1,删除 T 中 p 所指结点的左或右子树。ADT B
11、inaryTree,6.2.2 二叉树的几个特性,一、在二叉树的第 i 层上至多有 2i-1 个结点(i1)。二、深度为k的二叉树中至多含有 2k-1 个结点,(k1)。三、对任何一棵二叉树 T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1,若二叉树中所有的分支结点的度数都为2,且叶子结点都在同一层次上,则称这类二叉树为满二叉树。假如一棵包含 n 个结点的二叉树中每个结点都可以和满二叉树中编号为1至 n 的结点一、一对应,则称这类二叉树为完全二叉树。,第三节 二叉树的存储表示,6.3.1 顺序存储结构 二叉树的顺序存储结构的定义如下:const MAXSIZE=100;/暂定
12、二叉树中结点数的最大值为100typedef struct ElemType*data;/存储空间基址(初始化时分配空间)int nodeNum;/二叉树中结点数 SqBiTree;/二叉树的顺序存储结构,6.3.2 链式存储结构,二叉树的二叉链表存储表示typedef struct BiTNode ElemType data;struct BiTNode*Lchild,*Rchild;/左、右孩子指针*BiTree;,二叉树的三叉链表存储表示,typedef struct TriTNode ElemType data;struct BiTNode*Lchild,*Rchild;/左、右孩子指
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第六 二叉

链接地址:https://www.31ppt.com/p-5738460.html