第04讲二叉树.ppt

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第04讲二叉树

第四讲 二叉树 一、二叉树的定义 二、二叉树的性质 三、二叉树的抽象数据类型 四、二叉树的存储结构 五、二叉树遍历 六、二叉树其他运算 一、二叉树的定义 二叉树(Binary Tree)的递归定义为: 1)或者是一棵空树; 2)或者是一棵由一个根结点和两棵互不相交的分别称为根的左子树和右子树所组成的非空树,左子树和右子树又同样都是一棵二叉树。 在二叉树中,每个结点(Node)的左子树的根结点称之为左孩子( left child ),右子树的根结点称之为右孩子( right child )。没有左右孩子的结点称为叶子结点。每个结点的孩子数称为该结点的度。所有结点中最大的度称为该二叉树的度。 二、二叉树的性质 二叉树具有下列一些重要性质: 性质1 二叉树上终端结点数n0等于双分支结点数n2加1。即 n0 = n2 + 1 证明:设二叉树上终端结点数,即叶子结点数用n0表示,单分支结点数用n1表示,双分支结点数用n2表示,则总结点数为 n0 + n1 + n2 ; 另一方面,在一棵二叉树中,所有结点的分支数(即度数)应等于单分支结点数加上双分支结点数的2倍,即等于n1 + 2n2 。由于任何树中的结点数都等于所有结点的度数之和再加1,所以可得: n0 + n1 + n2 = n1 + 2n2 + 1 == n0 = n2 + 1 (证毕) 例如,在下面的图(a)中,双分支结点数为2,即A结点和C结点,所以叶子结点数为3个。 性质2 二叉树上第 I 层上至多有 2i-1 个结点( i≥1 )。 因为二叉树的树根结点为第1层,具有 1 个结点,用 i=1 代入 2i-1 公式,得到的结点数也是1,同样用i=2、3、... 等依次代入 2i-1 公式得到的结点数都是正确的,这可以通过数学归纳法加以证明,在此从略。 性质3 深度为 h 的二叉树至多具有 2h-1 个结点。 假定深度为h的二叉树中的每一层的结点都是满的,即都是满足性质2的,则整个二叉树才会具有最多结点数,其结点数为1+21+22+...+2h-1,利用等比数列求和的方法可得其和为 2h-1。 2h-1=(2-1)(1+21+22+...+2h-1)= 1+21+22+...+2h-1 在一棵二叉树中,当第i层的结点数为2i-1个时,则称此层的结点数是满的,当树中的每一层都满时,则称此树为满二叉树。 由性质3可知,深度为h的满二叉树中的结点数为2h-1个。如对于下图(a)所示的一棵深度为4的满二叉树,其结点数为15,它正好等于24-1即15。 在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干个结点,则称此树为完全二叉树。 由此可知,满二叉树是完全二叉树的特例。如上图(b)就是一棵完全二叉树,它与等高度的满二叉树相比,在最后一层的右边缺少了5个结点。该树中每个结点上面的数字为对该结点的编号。 对二叉树结点的编号,从树根结点用编号为1开始,然后逐层向下编号,若父结点的编号为 i ,则左、右孩子结点的编号分别为 2i 和 2i+1,若没有某个孩子结点则也应保留其编号。(若树根结点用编号为0开始,当逐层向下编号时,若父结点的编号为i ,则左、右孩子结点的编号应分别为 2i+1 和 2i+2 。) 性质4 具有n个结点的完全二叉树的深度为?log2(n+1)?或?log2n?+1。 证明过程可以参考教材中相应的内容。从这个性质可以看出:一棵完全二叉树的深度约等于以2为底的结点数n的对数。例如若一棵完全二叉树有20个结点,则深度为?log220?+1,即等于5。 在一棵二叉树中,若除最后一层外,其余层都是满的,而最后一层上的结点可以任意分布,则称此树为理想平衡二叉树,简称理想平衡树或理想二叉树。显然,理想平衡树包含满二叉树和完全二叉树。[ (a)是, (b)不是 ] 三、二叉树的抽象数据类型 二叉树的抽象数据类型的数据部分为一棵二叉树,操作部分包括初始化二叉树、建立二叉树、遍历二叉树、查找二叉树、输出二叉树、清除二叉树等一些常用操作。下面给出二叉树的抽象数据类型的具体定义。 DATA BinaryTree is Data: 采用任一种方式存储的一棵二叉树,假定用标识符BT表示。 Operations void InitBTree(BT); //初始化二叉树,即把它置为一棵空树 void CreateBTree(BT, char* a); //根据字符串a中的二叉树建立对应的存储结构 bool Empty

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档