红黑树算法实现与改进.pptVIP

  • 20
  • 0
  • 约2.45千字
  • 约 20页
  • 2020-08-15 发布于天津
  • 举报
红黑树算法实现与改进 1. 红黑树的分析与算法实现 1 )红黑树的介绍 2 )红黑树的插入算法介绍 3 )红黑树的查找算法介绍 4 )红黑树的删除算法介绍 5 )红黑树的修改算法介绍 2. 红黑树的扩充和改造 1 )顺序统计树 OS 2 )索引红黑树 1.1 红黑树的由来 2-3-4 树 二叉平衡树 红 黑 树 1.2 红黑树的定义 性质 1. 节点是红色或黑色 性质 2. 根是黑色 性质 3. 所有叶子都是黑 色(叶子是 NIL 节点) 性质 4. 每个红色节点的两个子 节点都是黑色 性质 5. 从任一节点到其每个叶子的 所有 简单路径 都包含相同数目的黑 色节点 红,黑颜色本 身没有特别的 意义,是的键 值决定了结点 的颜色 1.3 红黑树算法可行性证明 设定:红黑树树高为 Hrb , 红黑树的内部节点(非 null 节点)个数 为 N 有: Hrb=2 ×㏒ 2 (N+1)+1 证明:前提设红黑树最长路径含黑色节点个数为红黑树的黑色高度 设为: Hb 由已知条件: 从上面的结论可以看出:遍历红黑树的最不理想次数为 2 × log2 ( N+1 ) +1 算法复杂度为 O ( log2N )这是最不理想情况的可估算保证。 1.4 左旋和右旋的引入 父 子 弟 右旋 孙 子 父 弟 孙 孙 孙 左 旋 1 )左右旋操作时红黑树算法最基本的调用函数。 2 )在下面的演示中假定在树的的左支进行,默 认新结点为左孩子,在右半部的操作与默认情况 对称。 1.5 插入算法介绍 情景 1 :新结点为根结点或父结点为黑色(初始为红色) 直接染黑 情景 2. 新结点的父结点为红色且叔叔结点为黑色 祖 叔 新 父 直接把父 结点染黑 情景 3. 新结点的父结点为红色且叔叔结点为红色 新 父 叔 把父和叔结点染 黑祖父结点染红, 继续对祖父结点 调节 情 景 4. 新 结 点 的 父 结 点 为 红 色 且 叔 叔 结 点 为 空 祖 新 祖 父 先对父结 点做右旋, 再把祖父 结点染红, 父结点染 黑 祖 1.6 插入算法整体演示 插 入 6 6 插 5 入 4 5 右旋,染色 6 插 入 7 7 叔,父结点 染黑,祖父 结点染红 4 继续调整 祖父结点, 回溯到根 5 1.7 红黑树查找算法 红黑树是从二叉平衡树衍生而来的,在破坏红黑树结构的 前提下它的查找算法遵循二叉平衡树或者二叉搜索树的查 找历程。 递归 迭代 1.8 删除算法分析 删除过程主要分以下几种情景(这里的替换结点指前文中的 结点 B 不是 A ) 1 )删除结点不存在,直接返回 2 )删除结点存在且替换结点为红色 删除算法思想:找替替代点,覆盖,删除替代结点。 举例说明:假设删除结点 A 。 1. 找到结点 A 右子树中序遍历的第一个结点 B 作为替换结点。 2. 把 B 的键值赋给 A ,当不改变 A 的颜色 3. 删掉结点 B 4. 根据 B 的具体情况,做自下而上调整删除算法的关键就是调整。 9 4 8 aK 用 B 的键值覆盖 A 的键值,删除 B bK bK 1.9 删除情景调整续(一) 3.1 )替换结点 B 为黑色有黑色兄弟结点和“八字”红色侄子结点 B C F A 1. 左旋结点 F 2. 结点 C 继承 F 的颜 色,染黑结点 F 和 结点 D 3.B 的键值给 A 4. 删除 B B F C D D bk 1.10 删除情景调整续(二) 3.2 )替换结点 B 为黑色有黑色兄弟结点和“平行”红色侄子结点 A F B C D 红 D F B C 红 A bk 1. 对结点 F , C , D 做“中序旋转” 2. 结点 D 继承 F 的颜 色,染黑 F 3. 覆盖 A ,删除 B 1.10 红黑树删除算法续(三) 3.3 )替换结点 B 为黑色有红色色兄弟结点需要把结点 B 标记为“双黑” A F B C A C F B 1. 左旋结点 C 2. 结点 C 继承 F 的颜 色,染红 F 3. 把此时双黑“ B ” 的情景与 3.1 , 3.2 和 3.3 比较,继续 调整直到调整为 3.

文档评论(0)

1亿VIP精品文档

相关文档