- 1、本文档共127页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学要求: 掌握有关查找的基本概念,掌握顺序查找和折半
40 25 60 30 50 70 80 -1 -1 -1 -1 0 0 0 (a)一棵平衡二叉排序树 -1 -2 1 0 0 0 0 40 25 50 30 58 60 20 (b)一棵失去平衡的二叉排序树 当我们在一个平衡二叉排序树上插入一个结点时,有可能导致失衡,即出现绝对值大于1的平衡因子,如2、-2。 11 15 14 26 3 9 7 18 16 -1 0 0 0 0 0 0 0 -1 练习:计算右图二叉树中各结点的平衡因子,并判断是否是一棵平衡二叉排序树? 结论:该二叉树是一棵平衡二叉排序树。 实例分析:依次插入的关键字为5, 4, 2, 8, 6, 9 5 4 2 4 2 5 8 6 6 5 8 4 2 向右旋转 一次 先向右旋转 再向左旋转 继续插入关键字 9 4 2 6 5 8 9 6 4 2 8 9 5 向左旋转一次 将二叉排序树构造成平衡二叉树的方法 1、从第一个结点开始构造二叉树; 2、若此二叉树不是平衡二叉树,就进行“旋转”,使之成为平衡二叉树; 3、加入一个结点,构造二叉排序树。 反复执行 2 , 3直至全部结点组成一棵平衡二叉树为止。 失衡类型及相应的调整方法可归纳为以下四种: LL型平衡旋转 RR型平衡旋转 LR型平衡旋转 RL型平衡旋转 1)LL型(以B轴,对A做了一次顺时针旋转) A B BL BR S AR 2 1 (a)插入新结点S后失去平衡 B A BL BR S AR 0 0 (b)调整后恢复平衡 在一般二叉排序树的结点中增加一个存放平衡因子的域bf。 LL型失衡的特点是:A-bf=2,B-bf=1。 2)RR型(以B为轴,对A做了一次逆时针旋转) (a)插入新结点S后失去平衡 A B BL BR S AL -2 1 -1 (b)调整后恢复平衡 0 B A BL BR S AL 0 RR型失衡的特点是:A-bf=-2,B-bf=-1。 3)LR型(对B做了一次逆时针旋转,对A做了一次顺时针旋转) LR型失衡的特点是:A-bf=2,B-bf=-1。 A2 B-1 AR BL CL C1 CR A C AR BL CL B CR C B AR BL CL A CR ① ② 4)RL型(对B做了一次顺时针旋转,对A做了一次逆时针旋转 ) RL型失衡的特点是:A-bf=-2,B-bf=1。 A AL B BR C CL CR BR C A AL CL B CR A AL C BR B CL CR 1.在(a)图A的左子树的左子树上插入15后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可将A改为B的右孩子,B原来的右孩子改为A的左孩子,即以B为轴,对A做一次顺时针旋转。 40 25 60 20 30 1 0 0 0 0 A B (a)平衡二叉排序树 40 25 60 20 30 2 0 1 0 1 A B 15 0 (b)插入15后失去平衡 40 25 60 20 30 2 0 1 0 1 A B 15 0 (b)插入15后失去平衡 25 20 40 15 30 0 0 1 0 B A 60 0 0 (c)调整后的二叉排序树 调整:可将A改为B的右孩子,B原来的右孩子改为A的左 孩子,即以B为轴,对A做一次顺时针旋转,如图(c)。 2.在(a)图A的右子树B的右子树上插入70后,导致失衡,如(b)图。为恢复平衡并保证二叉排序树的特性,可将A改为B的左孩子,B原来的左孩子改为A的右孩子,即以B为轴,对A做一次逆时针旋转。 (a)平衡二叉排序树 60 25 20 40 30 -1 0 0 0 0 A B 25 20 40 30 60 -2 -1 0 -1 0 A B 70 0 (b)插入70后失去平衡 25 20 40 30 60 -2 -1 0 -1 0 A B 70 0 (b)插入70后失去平衡 0 -1 0 0 0 A B 0 40 25 60 30 70 20 (c)调整后的二叉排序树 调整:A改为B的左孩子,B原来的左孩子改为A的右孩子, 即以B为轴,对A做一次逆时针旋转,如图(c), 3.在(a)图A的左子树B的右子树上插入45后,导致失衡,如(b)图。 1 80 10 90 40 20 30 60 50 70 85 95 A 0 0 0 0 C 0 0 0 0 0 0 B (a)一棵平衡二叉排序树 80 10 90 40 20 30 60 50 70 85 95 A 0 0 0 1 C 0 1 0 0 0 -1 B 45 0 2 (b)插入45后失去平衡 为恢复平衡并保证二叉排序树的特性,可首先将B改为C的左孩子,而C原来的左孩子改为B的右孩子;然后将A改为C的右子,C原来的右孩子改为A的左孩子,即对B做了一次逆时针旋转,对
文档评论(0)