数据结构与算法分析 c++语言描述(第2版)larry nyhoff avl树 .ppt

数据结构与算法分析 c++语言描述(第2版)larry nyhoff avl树 .ppt

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
练习 给出依次插入结点1、2、3、4、5、6、7、16、15后得到的AVL树。 二叉树上机 实现算法接受包含后缀表达式的字符串,并建立表达式树 tnode<char> *buildExpTree(const string & pexp); (将子树根的地址推到栈中,该栈的元素是tnode<char>*类型) 使用displayTree()显示树 使用inorderOutput()遍历树,输出中缀表达式 * * 或者是一棵空树 或者左右子树均为AVL树,且左右子树的深度 之差的绝对值不超过1 若定义二叉树上结点的平衡因子BF(Balance Factor) 为该结点的左子树的深度减去右子树的深度,那么 在AVL树上所有结点平衡因子只可能为-1, 0, 1 只要二叉树上有一个结点的平衡因子的绝对值大于 1,则该二叉树就是不平衡的。 对AVL树来说,它的深度和logN同数量级,因此 我们希望任何初始序列构成的二叉查找树都 是 AVL树。 AVL树(平衡的二叉查找树) 1 1 1 -1 0 0 0 -1 1 2 0 0 1 平衡二叉树和不平衡二叉树示例 设最小不平衡子树的根为A,调整的规律可归纳 为下列四种: 1. RR型调整(单右旋); 2. LL型调整(单左旋) ; 3. LR型调整(先左后右双旋); 4. RL型调整(先右后左双旋); 上面的几种情况在经过平衡旋转处理后,以*b 或*c为根的新子树为平衡二叉树,而且它的深度和 插入之前以*a为根的子树相同。 因此,当平衡的二叉排序树因插入结点而失去平衡时,仅需对最小不平衡子树进行旋转处理。 指离插入结点最近,且以平衡因子绝对值大于1的结点为根的子树。 27 10 51 18 41 25 0 0 1 1 -1 -2 最小 不平衡子树 插入结点 最小不平衡子树: RR型调整操作示意图 (αBβ)A(γ)= (α)B(βAγ) 调整规则∶将A的左子女B提升为新二叉树的根;原来的根A连同其右子树γ向右下旋转成为B的右子树;B的原右子树β作为A的左子树。 插入项位于最近的平衡因子为+2的祖先结点的左孩子的左子树时使用。 27 10 0 1 B A 27 10 0 1 B A 05 2 27 10 0 0 B A 05 0 51 27 0 1 B A 10 0 ? 05 18 0 0 03 0 1 1 2 ? ? 51 27 0 B A 10 0 ? 05 18 0 03 0 1 0 ? ? RR型调整操作示例 LL型调整操作示意图 (α)A(βBγ)= (αAβ)B(γ) 调整规则:将A的右子女B提升为新二叉树的根;原来的根A连同其左子树向左下旋转成为B的左子树;B的原左子树作为A的右子树。 插入项位于最近的平衡因子为-2的祖先结点的右孩子孩子的右子树时使用。 27 51 0 -1 B A 27 51 0 -1 B A 73 -2 73 51 0 0 B A 27 0 51 27 0 -1 B A 10 0 73 41 0 99 73 0 B A 51 0 ? 27 41 0 10 0 0 -1 ? ? LL型调整操作示例 0 99 0 -1 -1 -2 ? ? ? LR型调整操作示意图 ((α)B(βCγ))A(δ)= (αBβ)C(γAδ) 调整规则∶设C为A的左子女的右子女,将A的孙子结点C提升为新二叉树的根;原C的父结点B连同其左子树α向左下旋转成为新根C的左子树,原C的左子树β成为B的右子树;原根A连同其右子树δ向右下旋转成为新根C的右子树,原C的右子树γ成为A的左子树。 插入项位于最近的平衡因子为+2的祖先结点的左孩子的右子树时使用。 51 27 0 1 B A 10 0 ? 05 18 0 0 C ? 51 27 0 C A 18 0 10 16 0 05 0 0 -1 ? B LR型调整操作示例 51 27 -1 B A 10 0 ? 05 18 0 1 C ? 16 0 ? -2 ? RL型调整操作示意图 (α)A((βCγ)B(δ))= (αAβ)C(γBδ) 调整规则:设C为A的右子女的左子女,将A的孙子结点C提升为新二叉树的根,原来C的父结点B连同其右子树δ向右下旋转成为新根C的右子树,C的原右子树γ成为B的左子树;原来的根A连同其左子树α向左下旋转成为新根C的左子树,原来C的左子树β成为A的右子树。 插入项位于最近的平衡因子为-2的祖先结点的右孩子的左子树时使用。 51 27

文档评论(0)

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

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

1亿VIP精品文档

相关文档