实验七 树及二叉树.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验七 树与二叉树 一、实验目的和要求 1 掌握树、森林及二叉树的基本概念。 2 掌握树、二叉树的存储结构。 3 掌握树、二叉树的遍历。 4 树和森林与二叉树之间的转换。 二、基本概念 树的定义 树是n(n = 0)个结点的有限集合T。如果n = 0,称为空树;如果n 0,即在一棵空树中: (1)有且仅有一个特定的称为根的结点,它只有直接后继,但是没有直接前驱; (2)当n 1时,其余结点可分为m(m 0)个互不相交的有限集合T1,T2,……,Tm,其中每一个集合本身又是一棵树,并且称这为根的子树。每棵子树的根结点有且仅有一个直接前驱,但是可以有0个或多个直接后继。 树的术语 (1) 树的结点:它包含数据元素及若干指向其子树的分支。 (2) 结点的度:结点所拥有的子树的棵数。 (3) 树的度:树中所有结点的度是大值。 (4) 叶结点:即度为0的结点,称为叶结点或终端结点。 (5) 分支结点:除叶结点之外的其他结点,称为分支结点或终端结点。 (6) 孩子结点:若结点x有子树,则子树的根结点即成为结点x的孩子结点。 (7) 双亲结点:若结点x有孩子结点,则该结点x称为这些孩子结点的双亲结点。 (8) 兄弟结点:同一双亲的孩子结点之间称为兄弟。 (9) 祖先结点:从根结点到该结点所经过的所有结点称为该结点的祖先结点。 (10)子孙结点:以某个结点为根的子树中的任一个结点都穭该结点的子孙结点。 (11)结点所处的层次:简称结点的层次,即从根到该结点所经过的分支条数。 (12)树的高度:树中结点的最大层次,称为树的高度或深度。 (13)有序树:树中各个结点的子树T1,T2,T3,……之间是有次序的,称为有序树。 (14)无序树:树中各个结点的子树T1,T2,T3,……之间是没有有次序的,称为无序树。 (15)森林:是m(m 0)棵互不相交的树的集合。 树的性质 性质1:树T的结点总数n(n = 0)等于其所有结点的出度之和加1。 性质2:度为k的树(k叉树)第i(i = 0)层至多有k i-1个结点。 性质3:深度为h的k(k 1)叉树至多有个结点。 性质4:具有n个结点的k叉树的最小深夜为:(logk(n(k-1)+1)( 。 二叉树的定义 (1) 二叉树定义:二叉树是n(n = 0)个结点的有限集,二叉树或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的分别称为根的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。 (2)满二叉树定义:若二叉树中每一层结点的个数都达到了最大,则称之为一棵满二叉树。 (3)完全二叉树定义:若一棵二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。 二叉树的性质 性质1:若二叉树的层次从0开始,则在二叉树的第i层最多有2i个结点。 性质2:高度为k的二叉树至多有2k-1个结点,(k = 1)。 性质3:对任何一棵二叉树,如果叶子结点的个数为n0,度为2的结点数为n2,则n0 = n2+1。 性质4:具有n个结点的完全二叉树的深度为(log2(n+1)(。 性质5:对于具有n个结点的完全二叉树,按层次从上至下,每层从左至右对线个结点进行编号,则编号为i的结点有如下性质: (1) 若i=1,则结点i为根结点,无双亲,否则的双亲编号为。 (2) 若2*i≤ n,则结点i有左孩子,左孩子的编号为2*i,否则,结点i无左孩子,肯定是叶子。 (3) 若2*i+1 ≤ n,则结点i有右孩子,右孩子的编号为2*i+1,否则,结点i无右孩子。 (4) 除根外,编号为奇数的结点为其双亲的右孩子,偶数结点为其双亲的左孩子。 二叉树的存储结构 同线性表一样,二叉树也有顺序和链式两种存储结构。 (1) 顺序存储结构 顺序存储一棵二叉树时,首先对该树中每个结点进行编号,然后以各结点的编号为下标,把各结点的值对应存储到一维数组bt[n+1]中,其中bt[1](bt[n]用来存入编号为1到n的结点的值,bt[0]用来存放结点的个数。这样的存储方式满足性质5。 (2) 链式存储结构 通常采用的方法是,在每个结点中设置三个域:数据域data、指向其左孩子的指针域Lchild、指向其右孩子的指针域Rchild。这种结构称为二叉链表。 Lchild data Rchild 结点类型可定义为: struct BtreeNode { Type data; //结点的数据域 BTreeNode *Lchild; //左孩子指针 BTreeNode *Rchild; //右孩子指针 }; 二叉树的遍历 二叉树的遍历是指按照一定次序访问树中所有结点,并且每个结点的值仅被访问一

文档评论(0)

kehan123 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档