C语言算法与数据结构.ppt

  1. 1、本文档共605页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
9.4.3 平衡二叉排序树的插入 平衡二叉排序树的插入操作实际上是在二叉排序插入的基础上完成以下工作: ⑴:判别插入结点后的二叉排序树是否产生不平衡? ⑵:找出失去平衡的最小子树; ⑶:判断旋转类型,然后做相应调整。 失衡的最小子树的根结点a在插入前的平衡因子不为0,且是离插入结点最近的平衡因子不为0的结点的。 若a失衡,从a到插入点的路径上的所有结点的平衡因子都会发生变化,在该路径上还有一个结点的平衡因子不为0且该结点插入后没有失衡,其平衡因子只能是由1到0或由-1到0,以该结点为根的子树深度不变。该结点的所有祖先结点的平衡因子也不变,更不会失衡。 1 算法思想(插入结点的步骤) ①:按照二叉排序树的定义,将结点s插入; ②:在查找结点s的插入位置的过程中,记录离结点s最近且平衡因子不为0的结点a,若该结点不存在,则结点a指向根结点; ③: 修改结点a到结点s路径上所有结点的; ④:判断是否产生不平衡,若不平衡,则确定旋转类型并做相应调整。 2 算法实现 void Insert_BBST(BBSTNode *T, BBSTNode *S) { BBSTNode *f,*a,*b,*p,*q; if (T==NULL) { T=S ; T-Bfactor=1 ; return ; } a=p=T ; /* a指向离s最近且平衡因子不为0的结点 */ f=q=NULL ; /* f指向a的父结点,q指向p父结点 */ while (p!=NULL) { if (EQ(S-key, p-key) ) return ; /* 结点已存在 */ if (p-Bfactor!=0) { a=p ; f=q ; } q=p ; if (LT(S-key, p-key) ) p=p-Lchild ; else p=p-Rchild ; /* 在右子树中搜索 */ } /* 找插入位置 */ if (LT(S-key,p-key)) q-Lchild=S ;/* s为左孩子 */ else q-Rchild=S ; /* s插入为q的右孩子 */ p=a ; while (p!=S) { if (LT(S-key, p-key) ) { p-Bfactor++ ; p=p-Lchild ; } else { p-Bfactor-- ; p=p-Rchild ; } } /* 插入到左子树,平衡因子加1,插入到左子树,减1 */ if (a-Bfactor-2 a-Bfactor2) return ; /* 未失去平衡,不做调整 */ if (a-Bfactor==2) { b=a-Lchild ; if (b-Bfactor==1) p=LL_rotate(a) ; else p=LR_rotate(a) ; } else { b=a-Rchild ; if (b-Bfactor==1) p=RL_rotate(a) ; else p=RR_rotate(a) ; } /* 修改双亲结点指针 */ if (f==NULL) T=p ; /* p为根结点 */ else if (f-Lchild==a) f-Lchild=p ; else f-Lchild=p ; } 例: 设要构造的平衡二叉树中各结点的值分别是(3, 14, 25, 81, 44),平衡二叉树的构造过程如图9-11所示。 3 3 14 (a) 插入不超过两个结点 (b) 插入新结点失衡,RR平衡旋转 3 14 25 3 14 25 3 14 25 81 (c) 插入新结点未失衡 (d) 插入结点失衡,RL平衡旋转 3 14 25 81 44 3 14 44 81 25 图9-11 平衡二叉树的构造过程 9. 5 索引查找 索引技术是组织大型数据库的重要技术,索引结构的基本组成是索引表和数据表两部分,如图9-12所示。 ◆ 数据表:存储实际的数据记录; ◆ 索引表:存储记录的关键字和记录(存储)地址之间的对照表,每个元素称为一个索引项。 索引表 数据表 图9-12 索引结构的基本形式 关键字 存储地址 263 275 386 … … 1046 关键字 … 386 263 1046 … 275 通过索引表可实现对数据表中记录的快速查找。索引表的组

文档评论(0)

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

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

1亿VIP精品文档

相关文档