欢迎光临112期刊网!
网站首页 > 论文范文 > 计算机论文 > 计算机应用 > AVL树算法的动态演示的设计与实现

AVL树算法的动态演示的设计与实现

日期:2023-01-24 阅读量:0 所属栏目:计算机应用


   1 引言

 《数据结构》是计算机学科中一门十分重要的核心课程,而对于算法的深入理解则是学好该课程的关键。本文通过对这种交互式动态演示的设计实现过程的详细描述,着重讨论了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=; }

  else { d=-1; b=; } if((>1)||(<-1)) balanced=false;

  if (balanced==false)

  { if((d==1)&(==1)) //ll型平衡旋转 { rotate(ot, b); }

  else if((d==1)&(==-1)) //lr型平衡旋转 { rotate(ot, );

  rotate(ot, b); }

  a) else if((d==-1)&(==-1)) //rr型平衡旋转

  { rotate(ot, b); } else if((d==-1)&(==1)) //rl型平衡旋转

  { rotate(ot, );

  rotate(ot, b); } } …

  4 平衡二叉树的删除算法的实现

  平衡二叉树的删除主要是如何找到失去平衡的最小子树的根结点a,我们设计了如下算法:

  (1)通过周游计算各结点的平衡因子。

  (2)从根结点开始按如下方法扫描。 部分代码如下:

  if (balanced==false) { n("删除结点导致二叉排序树不平衡,准备进行调整.");

  briefpause(); n("先判断平衡旋转类型.");

  briefpause();

  if(==2) { d=1; b=; } else if (==-2) { d=-1; b=; }

  if((d==1)&(!=-1)) //ll型平衡旋转 { n("ll型平衡旋转");

  rotate(ot, b); }

  else if((d==1)&(==-1)) //lr型平衡旋转 { n("lr型平衡旋转");

  rotate(ot, );

  briefpause(); rotate(ot, ); }

  else if((d==-1)&(!=1)) //rr型平衡旋转 { n("rr型平衡旋转");

  rotate(ot, b);

  }

  else if((d==-1)&(==1)) //rl型平衡旋转

  { n("rl型平衡旋转");

  rotate(ot, );
        briefpause(); rotate(ot, ); } } }

  5 平衡二叉树的查找算法的实现

  由于平衡二叉树的查找操作不会使其“失去平衡”,故其查找算法与二叉排序树的查找算法完全相同,在此不再赘述。

  参考文献

  [1] 许卓群 张乃孝 杨冬青 唐世渭 数据结构 1987年

  [2] 严蔚敏 吴伟民 数据结构 1992年

  [3] 印旻 java语言与面向对象程序设计 2000年

  [4] david java 2图形设计(卷ⅰ awt) 2000年

  [5] david java 2图形设计(卷ⅱ swing) 2000年

  [6] clayton walnum 看实例学java 1997年 [7] d.m.吉瑞 a.l.麦克莱伦 java图形设计 1997年

本文链接:http://www.qk112.com/lwfw/jsjlw/jisuanjiyingyong/245568.html

论文中心更多

发表指导
期刊知识
职称指导
论文百科
写作指导
论文指导
论文格式 论文题目 论文开题 参考文献 论文致谢 论文前言
教育论文
美术教育 小学教育 学前教育 高等教育 职业教育 体育教育 英语教育 数学教育 初等教育 音乐教育 幼儿园教育 中教教育 教育理论 教育管理 中等教育 教育教学 成人教育 艺术教育 影视教育 特殊教育 心理学教育 师范教育 语文教育 研究生论文 化学教育 图书馆论文 文教资料 其他教育
医学论文
医学护理 医学检验 药学论文 畜牧兽医 中医学 临床医学 外科学 内科学 生物制药 基础医学 预防卫生 肿瘤论文 儿科学论文 妇产科 遗传学 其他医学
经济论文
国际贸易 市场营销 财政金融 农业经济 工业经济 财务审计 产业经济 交通运输 房地产经济 微观经济学 政治经济学 宏观经济学 西方经济学 其他经济 发展战略论文 国际经济 行业经济 证券投资论文 保险经济论文
法学论文
民法 国际法 刑法 行政法 经济法 宪法 司法制度 法学理论 其他法学
计算机论文
计算机网络 软件技术 计算机应用 信息安全 信息管理 智能科技 应用电子技术 通讯论文
会计论文
预算会计 财务会计 成本会计 会计电算化 管理会计 国际会计 会计理论 会计控制 审计会计
文学论文
中国哲学 艺术理论 心理学 伦理学 新闻 美学 逻辑学 音乐舞蹈 喜剧表演 广告学 电视电影 哲学理论 世界哲学 文史论文 美术论文
管理论文
行政管理论文 工商管理论文 市场营销论文 企业管理论文 成本管理论文 人力资源论文 项目管理论文 旅游管理论文 电子商务管理论文 公共管理论文 质量管理论文 物流管理论文 经济管理论文 财务管理论文 管理学论文 秘书文秘 档案管理
社科论文
三农问题 环境保护 伦理道德 城镇建设 人口生育 资本主义 科技论文 社会论文 工程论文 环境科学