- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter11 搜索树-红黑树-B-树
数据结构与算法 Chapter11 搜索树 内容提要 11.1 二叉搜索树 11.2 AVL树 11.3 红黑树 11.4 B-树 11.5 应用 补充:扩充二叉树 增加了外部节点,用于替代树中的空子树。 1、红黑树定义 Red-Black tree, 简称RB-Tree; 它是在1972年由鲁道夫·贝尔发明的,他称之为“对称二叉B树”,它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中获得的; 特点: 利用对树中的结点 “红黑着色”的要求,降低了平衡性的条件,达到局部平衡, 有着良好的最坏情况运行时间,它可以在O(logn)时间内做查找,插入和删除,这里的n是树中元素的数目。 红黑树的应用 典型的用途是:关联数组; C++ STL中的关联式容器:集合set、多重集合multiset、映射map、多重映射multimap等均采用了红黑树的变体; setint s; mapint, strings 在Linux内核中,用于组织虚拟区间的数据结构也是红黑树; 代码参见: linux/include/linux/rbtree.h linux/lib/rbtree.c 红黑树的定义 平衡的扩充二叉搜索树,满足下面条件: 颜色特征:每个结点为“黑色”或“红色”; 根特征:根结点永远是“黑色”的; 外部特征:扩充外部叶结点都是空的“黑色”结点; 内部特征:“红色”结点的两个子结点都是“黑色”的,即:不允许两个连续的红色结点; 深度特征:对于每个结点,从该结点到其所有子孙叶结点的路径中所包含的黑色结点数量必须相同。 红黑树示例 红黑树结点定义示例 typedef int key_t; typedef int data_t; typedef enum color_t { RED = 0, BLACK = 1 }color_t; 2、红黑树性质 结点的阶(Rank):平衡性指标 从该结点到其子树中任意外部结点的任一条路径上的黑色结点的数量 不包括该结点本身,包括叶结点! 外部结点的阶为零 根结点的阶:树的阶 红黑树性质 设r是红黑树的阶,h是红黑树的高度(不包括外部结点),n是内部节点的个数 性质1:r ≤ h ≤ 2r 性质2:n ≥ 2r-1,最少是满二叉树 性质3:h ≤ 2log2(n+1) 结论: 红黑树搜索、插入、删除的时间复杂度为O(logn) 3、红黑树的插入 先调用BST的插入算法 把新结点着色为红色 若父节点是黑色,则算法结束 否则,进行“双红调整” 【叔父节点】指一个节点的父节点的兄弟节点 双红调整的情况 叔父节点是黑色:XYb, 需要旋转或重构 每个结点的阶保持原值,调整完成 叔父节点是红色:XYr, 需要换色 换色后继续检查平衡! 针对XYb的调整:旋转 四种情况:LLb、RRb 、LRb、RLb 针对XYr的调整:换色 四种情况:LLr、RRr 、LRr、RLr 以LLr为例:父祖换色 换色调整示例 插入4:首先调用BST的插入算法, 换色调整示例(1) 换色调整示例(2) 插入代码描述 使用BST插入算法,插入新结点z 把z标记为红色 While doubleRed(z) if isBlack(sibling(parent(z))) z←restructure(z) return else {sibling(parent(z) is red } z←recolor(z) 4、红黑树的删除 先调用BST的删除算法 如果被删除的结点有一个或两个外部叶结点,则直接删除,算法结束 如果有两个非叶子结点,则在右子树中寻找最小值结点(即其后续结点),与该结点进行值交换(颜色不变) 然后调用删除结点算法,直到转换为有一个或两个外部叶结点的情况,再进行删除 删除节点算法 待删除结点有两个外部结点, 直接把该结点变为叶结点 若该结点是红色,则算法结束 若该结点是黑色,删除后红黑树不平衡!“双黑” 待删除结点有一个外部结点 可知:如果该节点是黑色,其非空子节点为红色 将其子节点提升到该结点位置,颜色变黑 双黑结点调整算法 结点删除后,问题是: 解决“双黑”结点现象 讨论前提:双黑结点是待删结点的左子节点(右子节点对称处理即可) 有三种情况: 双黑结点的兄弟结点是黑色,且子结点有红色 双黑结点的兄弟结点是黑色,且有两个黑色子结点 双黑结点的兄弟结点是红色 情况1:第一种 双黑结点与其红色侄子“八字形外撇” 解决方法:单旋转 将兄弟结点C提上去 C继承原来父节点B的颜色 把B着为黑色,D着为黑色,其他颜色不变 情况
您可能关注的文档
- 《一元二次方程的应用》习题精选有答案.doc
- 常见会计面试问题.doc
- 汕头礼品设计,首选汕头联谊礼品公司.doc
- 2011年秋季开学典礼上的讲话.doc
- 主板维修实习任务安排.doc
- 10大学语文复习范围.doc
- 织金县工业发展与环境保护对策探索2.doc
- 2012年上期第二次月考初二历史试题.doc
- 匹克品牌设计.ppt
- 歌尔声学投资研究报告.doc
- 2025年中国锻铁围栏市场调查研究报告.docx
- 2025年中国椭圆型市场调查研究报告.docx
- 2025年中国无蔗糖原味豆浆市场调查研究报告.docx
- 2025-2031年中国泛在电力物联网行业发展运行现状及投资潜力预测报告.docx
- 2025年中国制袋机零件市场调查研究报告.docx
- 2025年中国智能除垢型电子水处理仪市场调查研究报告.docx
- 2025-2031年中国甘肃省乡村旅游行业市场深度研究及投资策略研究报告.docx
- 2025-2031年中国干海产品行业市场发展监测及投资战略规划报告.docx
- 2025年中国全铝图解易拉盖市场调查研究报告.docx
- 2025年中国人造毛皮服装市场调查研究报告.docx
最近下载
- 孝感非遗经典艺术赏析知到智慧树期末考试答案题库2025年湖北职业技术学院.docx VIP
- 2025年黑龙江省大庆市让胡路区乘风街道招聘社区工作者考前自测高频考点模拟试题含答案解析.docx VIP
- 慢性萎缩性胃炎诊治心得..ppt VIP
- 班组安全管理隐患排查.pptx
- 2025年黑龙江省大庆市让胡路区西宾街道招聘社区工作者考前自测高频考点模拟试题含答案解析.docx VIP
- 2025年黑龙江省大庆市让胡路区奋斗街道招聘社区工作者考前自测高频考点模拟试题含答案解析.docx VIP
- 甲醇燃料安全协议书.docx VIP
- 硕世-新冠产品说明书-加注册证号版.pdf VIP
- GoogleJavaStyleGuide中文版完整版.pdf VIP
- 抖音来客本地生活服务餐饮商家代运营策划方案.pptx VIP
文档评论(0)