二叉树操作课程设计报告.pdfVIP

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

二叉树操作课程设计报告

一、总体设计

1、程序功能简介

带枚举值的二叉树的实现,利用枚举值使二叉树的组成尽量平衡,即

左右子树的级数相差不多。可以完成二叉树结点数据的插入、删除、

查找和输出等功能。

2、程序设计要求

(1)仔细阅读程序,回答下列问题

a.枚举值Red和Black在程序中起什么作用,Red的结点和Black的结

点有什么区别?

b.一个结点的左右子树最多可以相差几级?为什么?

c.程序是通过哪些函数来调整二叉树左右子树的结构,举例说明如何

调整。

(2)增加对二叉树上结点中的数据进行由大到小排序的函数。

(3)增加对二叉树上结点中的数据进行由小到大排序的函数。

(4)增加计算二叉树中结点上数据的平均值的函数。

(5)修改main函数,增加菜单选项,使得用户可以通过键盘反复输

入命令或数值查看运行结果。

评定难易等级:A级

二、详细设计

1、对二叉树的初步了解

(1)本题中的二叉树是一颗二叉查找树,首先应具有二叉查找树的

特征。它或者是一棵空树;或者是具有下列性质的二叉树:若左子树

不空,则左子树上所有结点的值均小于它的根结点的值;若右子树不

空,则右子树上所有结点的值均大于它的根结点的值;左、右子树也

分别为二叉排序树。且结点上数据互不相同。如图所示:

(2)本题中的二叉树同时为平衡二叉树中的一类——红黑树,因此

它具有红黑树的特征。

红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。

在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了

如下的额外要求:

性质1.节点是红色或黑色。

性质2.根节点是黑色。

性质3每个叶节点是黑色的。

性质4每个红色节点的两个子节点都是黑色。(从每个叶子到根的所

有路径上不能有两个连续的红色节点)

性质5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色

节点。

这些约束强制了红黑树的关键性质:从根到叶子的最长的可能路径

不多于最短的可能路径的两倍长。要知道为什么这些特性确保了这个

结果,注意到性质4导致了路径不能有两个毗连的红色节点就足够了。

最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色

节点。因为根据性质5所有最长的路径都有相同数目的黑色节点,这

就表明了没有路径能多于任何其他路径的两倍长。

(3)由于红黑树性质的约束,在红黑树上只读操作不需要对用于二

叉查找树的操作做出修改,因为它也是二叉查找树。但是,在插入和

删除之后,红黑属性可能变得违规。恢复红黑属性需要少量(O(logn))

的颜色变更(这在实践中是非常快速的)并且不超过三次树旋转(对于

插入是两次)。这允许插入和删除保持为O(logn)次,但是它导致了

非常复杂的操作。

插入

我们首先以二叉查找树的方法增加节点并标记它为红色。(如果设为

黑色,就会导致根到叶子的路径上有一条路上,多一个额外的黑节点,

这个是很难调整的。但是设为红色节点后,可能会导致出现两个连续

红色节点的冲突,那么可以通过颜色调换(colorflips)和树旋转来调

整。)下面要进行什么操作取决于其他临近节点的颜色。同人类的家

族树中一样,我们将使用术语叔父节点来指一个节点的父节点的兄弟

节点。注意:

性质1和性质3总是保持着。

性质4只在增加红色节点、重绘黑色节点为红色,或做旋转时受到威

胁。

性质5只在增加黑色节点、重绘红色节点为黑色,或做旋转时受到威

胁。

在下面的示意图中,将要插入的节点标为N,N的父节点标为P,N

的祖父节点标为G,N的叔父节点标为U。在图中展示的任何颜色要

么是由它所处情形所作的假定,要么是这些假定所暗含(imply)的。

intRBtreeT::NodeInsert(RBnode*x)

{RBnode*tmp1=ROOT,*tmp2=tmp1;情形1:新节点N位于树的根上,没有父

节点。在这种情形下,我们把它重绘为黑

if(ROOT==NIL)

色以满足性质2。因为它在每个路径上对

{ROOT=x;黑节点数目增加一,性质5符合。

x-left=x-right=x-p=NIL;

++alive;

您可能关注的文档

文档评论(0)

166****5392 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档