数据结构辅导树和二叉树.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构辅导树和二叉树 树是一类重要的复杂的非线性数据结构,有着广泛的应用,这里主要讨论二叉树的存储结构及各种操作、树和二叉树的转换、树的应用等。 6·1 树的定义和基本术语 树的定义 树是包含n个结点的有限集合(n0) Tree=(D,R) 其中,D是具有相同性质的数据元素的集合,若D中只有一个元素,则R为空集,否则R是D上某个二元关系H的集合,H是如下描述的二元关系: 在D中存在唯一一个称为根的元素r0,它在关系H下无前驱; 除结点r0外,K中每个结点对于关系H来说,都有且只有一个前驱。 (3)结点r0外的任何结点rR,都存在一个结点序列r0,r1,…,rs,ri-1,riH(1=i=s),这样一个结点序列称为根到结点r的路径。 树的例子:家族,机构等 树的抽象数据类型的定义 ADT Tree 数据对象 D: 数据关系 R: 基本操作 P: InitTree(T); DestroyTree(T); CreateTree(T,definition); ClearTree(T); …… 树的表示方法 树形表示法: 自然界倒长的树(Knuth开初用正长的树表示) 文氏表示法: 用集合表示 凹入表示法: 类似书目 嵌套括号表示法: 广义表表示法 表示的多样性说明了树的应用的广泛性。 树的术语 结点:数据元素和指向子树的分枝;终端结点(叶子),分枝结点 子女:结点的子树的根称为结点的子女,该结点称为子女的双亲; 层次:根为第一层,根的子女为第二层,以此类推 深度:树中结点的最大层次称为树的深度(或高度) 度:结点的分枝数目 树的度:树中结点的最大度 兄弟:同一双亲的子女互称兄弟,其父母为兄弟的结点互称堂兄 祖先:结点的祖先是从根到该结点所经分支上的所有结点 子孙:以某结点为根的子树中的任一结点都称为该结点的子孙。 有序树:结点的子树从左到右有顺序,否则,称为无序树 森林 树的不相交集合,除去根结点后的子树集合就是森林 RF={root,ri|i=1,2,…,m,m0} 6·2 二叉树的概念及性质 6·2·1 二叉树的定义 1、 二叉树的定义 二叉树是一种重要的树型结构,它是n(n=0)个结点的有限集,其子树分为互不相交的两个集合,分别称为左子树和右子树,左子树和右子树也是如上定义的二叉树。二叉树不是树的特例。 2、抽象数据类型二叉树的定义: ADTBinaryTree {数据对象 D: 数据关系 R: 基本操作 P: } 3、二叉树的5种形态 空(二叉树);只有根结点;根结点和左子树;根结点和右子树;根结点和左右子树。 6·2·2 二叉树的性质 二叉树的5个性质非常重要,都应会证明。 二叉树的第i层至多有2i-1个结点; 深度为k的二叉树至多有2k-1个结点; 对于任何一棵二叉树T,若其终端结点(叶子)数为n0,度为1的结点数为n1,度为2的结点数n2,则n0= n2+1。 该性质应扩展到K叉树。 在介绍第四个性质前,先介绍两个概念: 满二叉树:深度为k结点数为2k-1的二叉树称为满二叉树。 完全二叉树:若对满二叉树的结点从上到下从左至右进行编号,则深度为k且有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树的编号从1到n一一对应时,称为完全二叉树。 从完全二叉树的定义可见,其叶子结点只能在最下面两层上,且从左到右的排满,即如果一个结点无左子树,该结点肯定就不应有右子树。(深度k的满二叉树可在最下层从右到左删除0=n=2k-1-1个结点。) 具有n个结点的完全二叉树的深度是(log2n(+1; 对于一棵完全二叉树,从上到下从左至右对结点进行编号,根结点为1,则对任一结点i(1=i=n),有: 若i=1,则结点是二叉树的根,无双亲,否则,其双亲是((; 如果2in,则结点i无左子女,否则,其左子女为2i; 如果2i+1n,则结点i无右子女,否则,其右子女为2i+1; 6·2·3 二叉树的存储结构 顺序存储结构 #define MAX_TREE_SIZE 100 typedef TElemType SqBiTree[MAX_TREE_SIZE]; SqBiTree bt; 二叉树按顺序结构存储必须按完全二叉树形式,这样,会浪费空间。例如,在最坏情况下,n个结点的单枝树,要占用2n-1个元素的存储空间。 二叉链表 lchild data rchild 元素结点除包括元素自身的信息外,还包括指向其左右子树的指针。即结点要包括数据域,左子树指针域和右子树指针域, 可形式定义如下: typedef struct BiTNode {TElemType data; struct BiTNode *l

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档