数据结构C语言版第九章 查找.ppt

  1. 1、本文档共72页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构C语言版第九章 查找

(3)二叉排序树的删除 1、概念:二叉排序树的删除是指从二叉排序树中删除一个结点后,要保证删除后所得二叉树仍然满足二叉排序树的性质不变,即相当于删除有序序列中的一个结点。 2、操作过程:首先要对二叉排序树进行查找,确定要删除的结点是否在二叉排序树中。若不在,则不作任何操作;否则,我们假设要删除的结点为p,结点p的双亲结点为f,下面分三种情况讨论: 左改双亲左,右改中序遍历直接前驱右 ASL=1/6[1+2+3+4+5+6]=21/6=7/2=(n+1)/2 *f *p 9.2. 动态查找表 *p *f 方法:直接令PL或PR作为*f的左子树即可 f-lchild=p-lchild(或f-lchild=p-rchild);free(p); 50 30 80 20 90 85 40 35 88 32 (3)被删除的结点p既有左子树,也有右子树 方法一: 40 40 实现:用结点s的值替代结点p的值,将结点s双亲的右指针域改为指向结点s的左子树,然后再删除结点s 。 被删结点p 中序遍历前驱结点s 被删关键字p = 50 9.2. 动态查找表 假设结点s的双亲结点为q即: p-data=s-data; q-rchild=s-lchild; free(s); 50 30 80 20 90 85 40 35 88 32 30 20 40 35 80 90 85 88 32 方法二: 9.2. 动态查找表 f-lchild=p-lchild;s-rchild= p-rchild;free(p); 9.2. 动态查找表 (4)二叉排序树的查找 将给定值与根结点比较,相等则查找成功,若值小于根结点,向左子树方向查找,若大于根结点,则向右子树查找. 在二叉排序树上查找其关键字,恰好走了一条从根结点到该结点的路径的过程,和给定值比较的关键字个数等于路径长度加1(或结点所在层数),因此和折半查找类似,和给定值比较的关键字个数不超过树的深度。注意,含有n个相同结点的二叉排序树并不唯一。 3 32 35 12 53 68 ASL=1/6[1+2+2+3+3+3]=14/6=7/3 关键字序列(35,12,32,3,53,68) ASL=1/6[1+2+2+3+3+4]=15/6=5/2 关键字序列(53,12,32,3,35,68) 3 12 32 35 53 68 9.2. 动态查找表 3 12 32 35 53 68 单枝二叉排序树 关键字序列( 3, 12,32,35, 53, 68) 9.2. 动态查找表 9.2.2 平衡二叉树 (a) AVL树 D 0 B -1 A 1 C 0 C B A 2 -2 0 1 D E 0 (b) 非AVL树 1、平衡二叉树的概念 ???? (1)结点的平衡因子BF(Balanced Factor) 该结点的平衡因子等于左子树的深度减去右子树的深度。 ? (2)平衡二叉树 平衡二叉树或者是一棵空树,或者是每个结点的平衡因子绝对值不大于1的树。显然,平衡二叉树上所有结点的平衡因子只可能是-1、0和1。 9.2. 动态查找表 2、平衡二叉树的构造和调整 (1)、基本原则:按照二叉分类树的构造方法,构造过程中判断是否为平衡二叉树(平衡因子),是,则继续构造,否则,按一定的原则(保持是二叉分类和平衡),将其调整为平衡,然后继续。 (2)、插入过程中的调整原则: 二叉分类树在插入前平衡,插入一个结点后如果失去平衡,则至少有一个结点的平衡因子变为+2或-2 若平衡因子=+2,则左分支高于右分支 若平衡因子=-2,则右分支高于左分支 9.2. 动态查找表 A 2 AR h-1 BR h-1 B 1 h BL 插入结点 B 0 BL h A 0 AR h-1 BR h-1 ① LL型平衡旋转 由于在结点A的左孩子B的左子树上插入新结点,使A的平衡因子由1增至2而失去平衡,所以此时应以B为轴心作顺时计旋转,使得结点A作为结点B的右孩子,而将B的右孩子作为A的左孩子。 设在插入结点的过程中,使二叉树失去平衡的最小子树的根结点为A 。则失去平衡后,进行调整的规律可归纳为4种情况. 9.2. 动态查找表 (b) RR型平衡调整法 A -2 B -1 AL h-1 BL h-1 h BR 插入结点 B 0 A 0 BL h-1 AL h-1 h BR 9.2. 动态查找表 ② RR型平衡旋转 由于在结点A的右孩子B的右子树上插入新结点,使A的平衡因子由-1增至-2而失去平衡,所以此应以B为轴心作逆时针旋转,使得结点A作为结点B

文档评论(0)

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

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

1亿VIP精品文档

相关文档