AVL树算法的动态演示的设计与实现_计算机论文.docVIP

AVL树算法的动态演示的设计与实现_计算机论文.doc

  1. 1、本文档共5页,可阅读全部内容。
  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文档。上传文档
查看更多
AVL树算法的动态演示的设计与实现_计算机论文.doc

AVL树算法的动态演示的设计与实现_计算机论文 AVL树算法的动态演示的设计与实现_计算机论文 摘 要 《数据结构》是计算机学科中一门十分重要的核心课程,对算法的深入理解是学好该课程的关键。为了使学生更好地理解算法,作为对课堂教学的有益补充,我们设计开发了《AVL树算法的动态演示》课件,以帮助学生理解数据结构算法。本文通过对这种交互式动态演示的设计实现过程的详细描述,着重讨论了AVL树动态演示的算法实现。 关键字 AVL树;动态演示;Java Applet1 引言 《数据结构》是计算机学科中一门十分重要的核心课程,而对于算法的深入理解则是学好该课程的关键。本文讨论的AVL树算法的动态演示除了考虑怎样实现在网上传输外,更重要的是要考虑如何将抽象的算法形象生动的再现给学生,帮助他们更加透彻的理解算法的来龙去脉。 现成的教学课件大多数是用Authorware、PowerPoint等工具开发的,它们具有开发简单、界面友好等优点,但由于占用存储空间很大,不适合在网上传输。而用Java语言编写的小应用程序(Java Applet) 不仅可以具有很强的交互性,还可以嵌入Web页中,在网上传输,从而实现真正的网络课件。 2 设计与实现 平衡二叉树(balanced binary tree或height-balanced tree)又称AVL树。它或者是一棵空树,或者是一棵具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。 为了研究平衡二叉树的特点,我们假设二叉排序树总是由于插入或删除结点才“失去平衡”的,现在我们只需研究在一个平衡二叉树中插入或删除一个结点后的变化情况,以及如果这种变化引起二叉排序树“不平衡”,怎样进行调整,使其成为平衡二叉树。 由上述分析,我们只要对二叉排序树的插入和删除算法做一些修改,即可实现平衡二叉树的插入和删除。 在设计该算法的动态演示的过程中,我们得到了如下的定理: 定理:在平衡树上插入和删除一个结点后,可能会导致二叉排序树不平衡,通过计算结点的平衡因子,如果判断出二叉排序树已经失去平衡,此时,总能找到这样一个惟一的结点a,它满足: (1)它是失去平衡的最小子树的根结点。 (2)将以它为根的子树调整平衡后,整棵树即是平衡树。 3 平衡二叉树的插入算法的实现 我们知道,一般情况下,假设由于在二叉排序树上插入结点而失去平衡的最小子树的根结点指针为a(即a是离插入结点最近,且平衡因子绝对值超过1的祖先结点),则失去平衡后进行调整的规律可归纳为四种情况:①LL型平衡旋转;②RR型平衡旋转;③LR型平衡旋转;④RL型平衡旋转。 由于我们已经有了二叉排序树的插入算法,为了得到平衡二叉树的插入算法,我们可以在这个算法的基础上做以下三点修改: (1)判别插入结点之后是否产生不平衡。 (2)找到失去平衡的最小子树。 (3)判别旋转类型并作相应处理。 部分代码如下: if(((LabelledPoint) (node)).value((LabelledPoint) (a)).value) { d=1; b=a.left; } else { d=-1; b=a.right; } if((a.bfgt1)||(a.bf-1)) balanced=false; if (balanced==false) { if((d==1)amp(b.bf==1)) //LL型平衡旋转 { rotate(super.snapshot, b); } else if((d==1)amp(b.bf==-1)) //LR型平衡旋转 { rotate(super.snapshot, b.Left); rotate(super.snapshot, b); } a) else if((d==-1)amp(b.bf==-1)) //RR型平衡旋转 { rotate(super.snapshot, b); } else if((d==-1)amp(b.bf==1)) //RL型平衡旋转 { rotate(super.snapshot, b.Left); rotate(super.snapshot, b); } } … 4 平衡二叉树的删除算法的实现 平衡二叉树的删除主要是如何找到失去平衡的最小子树的根结点a,我们设计了如下算法: (1)通过周游计算各结点的平衡因子。 (2)从根结点开始按如下方法扫描。 部分代码如下: if (balanced==false) { super.panel.caption(删除结点导致二叉排序树不平衡,准备进行调整.); briefPause(); super.panel.caption(先判断平衡旋转类型.

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档