- 1、本文档共188页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章
树和二叉树
;数据结构可分为线性结构和非线性结构两大类。前面几章主要研究的是线性结构。一般的,线性结构只能用来描述数据元素之间的线性顺序关系,而很难反映元素之间的层次(分支)关系。本章将要讨论一种非线性数据结构,所谓非线性结构是指在结构中至少存在一个数据元素,它具有两个或两个以上的直接后继或直接前驱。
树形结构,是一类非常重要的非线性数据结构,它用于描述数据元素之间的层次关系。树形结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。经常用到的两种结构是树和二叉树。
本章先介绍树、二叉树的定义、性质及存储结构,重点讨论二叉树的存储结构及其各种操作,并研究树和森林与二叉树之间的转换关系,最后介绍树的应用。;内容提要;6.1 树的定义
和基本术语;树(Tree)是包含n(n≧0)个结点的有限集。在任意一棵非空树中:
(1) 有且仅有一个特定的称为根(Root)的结点;
(2) 当n1时,其余的结点可分为m(m0)个互不相交的子集T1,T2,T3…Tm,其中每个子集又是一棵树,并称其为子树(Subtree)。
树也可以这样定义: 树是由根结点和若干棵子树构成的。可以看出,在树的定义中用了递归的概念,即在树的定义中又用到树的定义,它道出了树的固有特性,因此递归算法是树结构算法的显著特点。;
上图(a)是只有一个根结点的树;图(b)是有13个结点的树,其中A是根,其余结点分成三个互不相交的子集: T1={B,E,F,K,L},T2={C,G},T3={D,H,I,J,M};T1、T2和T3都是根A的子树,且本身也是一棵树。例如T1,其根为B,其余结点分为两个互不相交的子集;T11={E,K,L},T12={F}。T11和T12都是B的子树。而T11中E是根结点,{K}和{L}是E的两棵互不相交的子树,其本身又是只有一个根结点的树。;数据对象 D:; 基本操作:; Root(T) // 求树的根结点 ;InitTree(T) // 初始化置空树 ; ClearTree(T) // 将树清空 ;树的表示方法有四种,各用于不同的目的。
(1) 直观表示法:就是一棵树的直观表示。
(2) 广义表示法:下图 (a)是以广义表的形式表示的,根作为由子树森林组成的表的名字写在表???左边。树的形式化表示法主要用于树的理论描述。
(3) 凹入表示法:下图(b)用的是凹入表示法(类似书的编目)。树的凹入表示法主要用于树的屏幕和打印显示。
(4)嵌套集合表示法:参见P120图6.2。
表示方法的多样性,正说明了树结构在日常生活中及计算机程序设计中的重要性。一般来说,分等级的分类方案都可用层次结构来表示,也就是说,都可产生一个树结构。;A;基 本 术 语;结点:;(从根到结点的)路径:;(1) 有确定的根;
(2) 树根和子树根之间为有向关系。;任何一棵非空树是一个二元组
Tree = (root,F)
其中:root 被称为根结点
F 被称为子树森林;对比树型结构和线性结构的结构特点;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;6.2
二 叉 树
;6.2.1 二叉树的定义
二叉树(Binary Tree)或为空树,或是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。;二叉树的五种基本形态:;抽象数据类型二叉数定义;二叉树的主要基本操作:; Root(T); Value(T, e); Parent(T, e);
LeftChild(T, e); RightChild(T, e);
LeftSibling(T, e); RightSibling(T, e);
BiTreeEmpty(T); BiTreeDepth(T);
PreOrderTraverse(T, Visit());
InOrderTraverse(T, Visit());
PostOrderTraverse(T, Visit());
LevelOrderTraverse(T, Visit());; InitBiTree(T);
Assign(T, e, value);
CreateBiTree(T, definition);
InsertChild(T, p, LR, c);;ClearBiTree(T);
DestroyBiTree(T);
DeleteChild(T, p, LR);;6.2.2 二叉树 的性质; 性质1 :
在二叉树的第 i 层上至多有2i-1 个结点。
文档评论(0)