文档详情

树和二叉树第六章讲解.ppt

发布:2017-04-21约1.13万字共103页下载文档
文本预览下载声明
第六章 树和二叉树; 6.1 树的定义和基本术语;A;ADT Tree { 数据对象D:D是具有相同特性的数据元素的集合. 数据关系R: 若D为空集,则称为空树; 若D仅含一个数据元素,则R为空集,否则R={H}, H是如下二元关系: (1)在D中存在唯一的称为根的数据元素root,它在 关系H下无前驱; ; (2)若D-{root}=φ,则存在D-{root}的一个划分D1 D2,…, Dn(m0),对任意j=k(1=j,k=m)有Dj∩ Dk=φ,且对 任意的i(1=i=m),唯一存在数据元素xi ∈Di,有 root, xi∈H; ⑶对应于D-{root}的划分,H-{root, xi,…,root, xn}有唯一的一个划分H1, H2,…, Hn(m0),对任意的j=k(1=j,k=m)有Hj ∩Hk=φ,且对任意i(1=i=m), Hi是Di上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。 ; 基本操作P: InitTree(T); 操作结果:构造空树T DestroyTree(T); 初始条件:树T存在 操作结果:销毁树T;CreatTree(T,definition); 初始条件:definition给出树T的定义 操作结果:按definition树构造树T ClearTree(T) 初始条件:数T存在 操作结果:将树T清为空树 TreeEmpty(T); 初始条件:树T存在 操作结果:若T为空树,则返回TRUE,否则FALSE ;TreeDepth(T); 初始条件:树T存在 操作结果:返回T的深度 Root(T); 初始条件:树T 存在 操作结果:返回T的根 Value(T,cur_e); 初始条件:树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的非根结点,则返回它的双亲,否则函数值为“空” LeftChild(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点 操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返回“空” ;RightSibling(T,cur_e); 初始条件:树T存在,cur_e是T中某个结点 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则 函数值为 “空” InsertChild(T,P,i,c); 初始条件:树T存在,P指向T中某个结点,1=i=P所指结点的度+1,非空树c 与T不相交 操作结果:插入c为T中p指结点第i棵子树 ;DeleteChild(T,P,i); 初始条件:树T存在,p指向T中某个结点,1=i=P指结点的度 操作结果:删除T中P所指结点的第i棵子树 TraverseTree(T,Visit()); 初始条件:树T存在,Visit是对结点操作的应用函数 操作结果:按某种次序树对T的每个结点调用函数visit()一次且至多一次,一旦visit()失败,则操作失败 }ADT Tree ;树的逻辑表示形式 (a)树型结构 (b)嵌套集合 (c)广义表 (d)凹入表(目录表示法) ;;度:结点拥有的子树数称为结点的度 叶子(终端结点):度为0的结点 非终端结点(分支结点):度不为0的结点 树的度是树内各结点的度的最大值 结点的子树的根称为该结点的孩子 该结点称为孩子的双亲(parent) 深度:树中结点的最大层次 ;A;有序树:将树中结点的各子树看成从左到右是有次序的(不能互换),称该树为有序树。 无序树:将树中结点的各子树看成从左到右是无次序的(不能互换),称该树为无序树。 森林:是m(m=0)棵互不相交的树的集合; 6.2 二叉树;Φ; InitBiTree(T); 操作结果:构造空二叉树T DestroyBiTree(T); 初始条件:二叉树T存在 操作结果:销毁二叉树T;CreatBiTree(T,definition); 初始条件:definition给出二叉树T的定义 操作结果:按definition树构造二叉树T ClearBiTree(T) 初始条件:二叉树T存在 操作结果:将二叉树T清为空树 BiTreeEmpty(T); 初始条件:二叉树T存在 操作结果:若T为空二叉树,则返回TRUE,否则FALSE ;BiTreeDepth(T); 初始条件:二叉树T存在 操作结果
显示全部
相似文档