- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第九章 查找 主讲:戚玉涛 第九章 查找 9.1 查找的基本概念 9.2 静态查找表——基于线性表的查找法 9.3 动态查找表——基于树表的查找法 9.4 哈希表——计算式查找法 动态查找表 动态查找表的特点:表结构本身在查找过程中动态生成,即对于给定值key,若表中存在关键字等于key的记录,则查找成功,否则插入关键字等于key的记录。 用树型结构存储表 二叉排序树 平衡二叉排序树 B树 二叉排序树 二叉排序树BST (Binary Sort Tree) 的定义:或者是一棵空树, 或者是具有如下性质的二叉树: (1)若它的左子树不空, 则左子树上所有结点的值均小于根结点的值; (2)若它的右子树不空, 则右子树上所有结点的值均大于根结点的值; (3)它的左右子树也分别为二叉排序树。 二叉排序树 二叉排序树的结构体定义: typedef struct BiTNode{ /*记录类型*/ KeyType key; /*关键字项*/ InfoType data; /*其他数据域*/ struct BiTNode *lchild, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree; BiTree SearchBST(BiTree T, KeyType key) { if ( !T || EQ(key, T-key) ) /*递归终结条件*/ return T; else if (LT(key, T-key)) return SearchBST(T-lchild, key); /*左子树中查找*/ else return SearchBST(T-rchild, key); /*右子树中查找*/ } 二叉排序树的插入和生成 查询+插入操作: 二叉排序树的插入和生成 关键字序列:{45, 24, 53, 45, 12, 28, 90} 二叉排序树的删除 和插入相反,删除在查找成功之后进行,并且要求在删除二叉排序树上某个结点之后,仍然保持二叉排序树的特性。 在二叉排序树中删去一个结点相当于删去有序序列中的一个结点。假设要删除的结点为p,结点p的双亲结点为f。 下面分三种情况讨论: 二叉排序树的删除 情况1:若p为叶子结点,则可直接将其删除: f-rchild=NULL(或f-lchild=NULL) ; free(p); 二叉排序树的删除 情况2:若p结点只有左子树,或只有右子树,则可将p的左子树或右子树直接改为其双亲结点f的左(右)子树,即: f-rchild=p-lchild(或f-rchild=p-rchild); free(p); 二叉排序树的删除 情况3:若p既有左子树,又有右子树,则以p所指向的结点的前驱(中序遍历的前驱)替代之,然后再删除该前驱结点。 若p既有左子树,又有右子树,设p为双亲f的左孩子,s为p 的前驱结点。 此时有两种处理方法: 方法1:将p的左子树改为f的左子树,而将p的右子树改为s的右子树。 方法2:用s结点的值替代p结点的值,再将s结点删除,原s结点的左子树改为s的双亲结点q的右子树。 平衡二叉树 平衡二叉树的定义:若一棵二叉排序树中每个结点的左、右子树的高度至多相差1,则称此二叉树为平衡二叉树。 平衡因子BF(Balance Factor) :二叉树中每个结点的平衡因子是该结点左子树的高度减去右子树的高度。 从平衡因子的角度可以说,若一棵二叉树中所有结点的平衡因子的绝对值小于或等于1,即平衡因子取值为1、0或-1,则该二叉树称为平衡二叉树。 平衡二叉树 如何构造出一棵平衡二叉排序树呢?Adelson-Velskii和Landis提出了一个动态地保持二叉排序树平衡的方法 其基本思想是:在构造二叉排序树的过程中,每当插入一个结点时,首先检查是否因插入而破坏了树的平衡性,如果是因插入结点而破坏了树的平衡性,则找出其中最小不平衡子树,在保持排序树特性的前提下,调整最小不平衡子树中各结点之间的连接关系,以达到新的平衡。通常将这样得到的平衡二叉排序树简称为AVL树。 平衡二叉树 最小不平衡子树:是指以离插入结点最近、且平衡因子绝对值大于1的结点作根结点的子树。为了简化讨论,不妨假设二叉排序树的最小不平衡子树的根结点为A,则调整该子树的规律可归纳为下列四种情
文档评论(0)