欢迎来到天天文库
浏览记录
ID:40220993
大小:4.44 MB
页数:187页
时间:2019-07-26
《数据结构(第六章-树和二叉树)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数据结构第6章树和二叉树线性结构:线性表(顺序表、链表)栈和队列数组、广义表非线性结构:树图引言主要内容6.1树及其抽象数据类型6.2二叉树6.3线索二叉树6.4Huffman树6.5树的表示和实现树结构是一类重要的非线性结构。树结构是结点之间有分支,并且具有层次关系的结构,它非常类似于自然界中的树。树结构在客观世界中是大量存在的,例如家谱、行政组织机构都可用树形象地表示。树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,可用树来组织信息;在分析算法的行为时,可用树来描述其执行过程,等等。6.1树及其抽象数据类型树结构6.1树及其抽
2、象数据类型树结构举例由上可知,在树结构中,除根结点以外的结点只有一个直接前驱结点,可以有零个至多个直接后继结点;根结点没有前驱结点。6.1树及其抽象数据类型树结构树(Tree)是由n(n>=0)个结点组成的有限集合。n=0的树称为空树,n>0的树由以下两个条件约定构成:1.有且仅有一个特殊的称为根(Root)的结点,它只有后继结点,没有前驱结点;2.其余的结点可分为m(n>m>=0)个互不相交的子集T0、T1、T2…、Tm-1,其中每个子集又是一棵树,并称其为子树(Subtree)。6.1树及其抽象数据类型树定义比如上图,左边为只有一个结点的树,A为根。右边是一个有8个结点的树
3、,A为根,其余可以分为三个不相交的子集,也就是可以分为三个子树。A6.1树及其抽象数据类型树定义6.1树及其抽象数据类型树定义结点的双亲结点或父母结点(parent):结点上面的相邻结点,或指结点的前驱结点结点n的孩子结点(child):任何一个以n作为双亲结点的结点,或指结点n的后继结点树的根(root):有且仅有的一个特定的结点,它没有双亲结点6.1树及其抽象数据类型基本术语结点n的祖先结点(ancestor):包括n的双亲结点,n的双亲结点的双亲结点,等等;即指从根结点到其父母结点所经过的所有结点根是树中所有结点的公共祖先结点结点n的子孙(后代)结点(descendant
4、):任何一个以n作为祖先结点的结点;即指结点的所有孩子结点,以及孩子的孩子等兄弟结点(sibling):如果结点m和n共有一个双亲结点,则称m和n为兄弟结点6.1树及其抽象数据类型基本术语叶子结点(终端结点)(leaf):没有孩子结点的结点分支结点(非终端结点):叶子结点之外的结点称为分支结点或者非终端结点子树(subtree):在树T中,n的子孙结点组成了以n作为根的T的子树6.1树及其抽象数据类型基本术语结点n的度(degreeofnode):n的孩子结点的数量树的度(degreeofatree):树中所有结点的最大度数6.1树及其抽象数据类型基本术语结点n的层次(leve
5、l):结点n所处的树中的层次位置。可以假设根的层次是0或1,本书中所有都假设根的层次为1,其他结点的层次是其父母结点的层次加1树的高度(heigh)或深度(depth):树中结点的最大层次数6.1树及其抽象数据类型基本术语边(edge):设树中X结点是Y结点的父母结点,有序对(X,Y)称为连接这两个结点的分支,也称为边路径(path):从一个结点n到另一个结点的边序列,如设(X0,X1,…,Xk-1)是由树中结点组成的一个序列,且(Xi,Xi+1)都是树中的边,则该序列称为X0到Xk-1的一条路径路径长度(length):路径中涉及到边的数量6.1树及其抽象数据类型基本术语若把
6、树中每个结点的各子树看成从左到右有次序的(即不能互换),则称该树为有序树(OrderedTree);否则称为无序树(UnorderedTree)森林(forest):m棵互不相交的树的集合(如:{T0,T1,T2…Tm-1}),但可能为空6.1树及其抽象数据类型基本术语1.树形结构表示法(图示法)具体参见下图6.1树及其抽象数据类型树的表示2.横向凹入表示法具体参见下图6.1树及其抽象数据类型树的表示3.嵌套集合表示法(文氏图表示法)具体参见下图6.1树及其抽象数据类型树的表示4.广义表表示法对图6-1(c)的树结构,广义表表示法可表示为:(A(B(E(J,K,L),F),C(
7、G),D(H(M),I)))6.1树及其抽象数据类型树的表示ADTTree//树抽象数据类型{booleanisEmpty()//判空intlevel(Tkey)//层次intsize()//结点数intheight()//高度voidpreorder()//先根次序遍历voidpostorder()//后根次序遍历voidlevelorder()//层次遍历TreeNodeinsert(Tx)//插入元素x作为根TreeNodeinsert(TreeNodep,Tx
此文档下载收益归作者所有