高级数据结构与算法 红黑树及线段树

合集下载

数据结构与算法(8):红黑树

数据结构与算法(8):红黑树

// 前提:这里里里假设x的右孩子子为y。下面面开始正式操作 // 将 “y的左孩子子” 设为 “x的右孩子子”,即 将β设为x的右孩子子 // 将 “x” 设为 “y的左孩子子的父父亲”,即 将β的父父亲设为x // 将 “x的父父亲” 设为 “y的父父亲”
05 if p[x] = nil[T] 06 then root[T] ← y
的右孩子子”
10 left[y] ← x
// 将 “x” 设为 “y的左孩子子”
11 p[x] ← y
// 将 “x的父父节点” 设为 “y”
理理解左旋之后,看看下面面更更鲜明的例例子子。
2.2 右旋
对Y进行行行右旋,意味着“将Y变成一一个右节点”
右旋的伪代码《算法导论》:参考上面面的示意图和下面面的伪代码,理理解“红黑黑树T的节点y进行行行右 旋”是如何进行行行的。
1.2 红广泛,主要是用用它来存储有序的数据,它的时间复杂度是O(lgn),效率非非常之
高高。
例例如,Java集合中的TreeSet和TreeMap,C++的STL中的Set、Map,以及Linux虚拟内存的管
理理,都是通过红黑黑树去实现的。
二二、红黑黑树的基本操作:左旋和右旋
数据结构与算法(8):红黑黑树
红黑黑树,即R-B Tree,本文文的主要内容包括:红黑黑树的特性、红黑黑树的时间复杂度和它的证明, 红黑黑树的时间复杂度和它的证明,红黑黑树的左旋、右旋、插入入、删除等操作
一一、红黑黑树的定义
1.1 红黑黑树的定义
R-B Tree,全称是Red-black Tree,又又称为“红黑黑树”,它是一一种特殊的二二叉查找树。红黑黑树的每 个节点上都有存储位表示节点的颜色色,可以是红(Red)或黑黑(Black)

c++ 红黑树 map原理

c++ 红黑树 map原理

c++ 红黑树 map原理
C++中的红黑树是一种自平衡的二叉查找树,它常用于实现关联
容器中的map数据结构。

红黑树通过对节点进行着色和旋转操作来
保持树的平衡,从而确保在最坏情况下的查找、插入和删除操作的
时间复杂度为O(log n)。

红黑树的基本原理包括以下几点:
1. 节点着色,每个节点都被标记为红色或黑色,这些颜色标记
用于确保树的平衡。

2. 根节点和叶子节点,根节点是黑色的,叶子节点(NIL节点)是黑色的。

3. 红色节点规则,红色节点的子节点必须是黑色的,即不能出
现两个相连的红色节点。

4. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色
节点。

这保证了树的黑色平衡。

在C++中,STL中的map数据结构通常使用红黑树来实现。

map 是一种关联容器,它提供了一种将键和值关联起来的方式。

当我们向map中插入新的键值对时,红黑树会自动进行调整以保持平衡。

查找、插入和删除操作都能在O(log n)的时间复杂度内完成,这使得map非常高效。

总之,红黑树是一种高效的自平衡二叉查找树,它通过节点着色和旋转操作来维持平衡。

在C++中,map数据结构通常使用红黑树来实现,从而提供了高效的插入、删除和查找操作。

这些原理和实现细节都是为了确保数据结构的高效性和稳定性。

数据结构树的种类

数据结构树的种类

数据结构树的种类树是一种基本的数据结构,用于表示具有层次结构的数据。

它由一组节点组成,其中的每个节点都可以有零个或多个子节点。

树可以有不同的种类,每种种类具有不同的特点和应用场景。

以下是一些常见的树的种类:1. 二叉树(Binary Tree):二叉树是一种每个节点最多只有两个子节点的树结构。

它可以是空树,或者由一个根节点、左子树和右子树组成。

二叉树具有简单的结构,常用于二分和排序。

2. 二叉树(Binary Search Tree):二叉树是一种具有以下特点的二叉树:左子树中的所有节点都比根节点小,右子树中的所有节点都比根节点大。

二叉树支持快速的查找、插入和删除操作,并在树中保持有序性。

3. 平衡二叉树(Balanced Binary Tree):平衡二叉树是一种二叉树,但它在插入和删除节点时会自动调整树的结构以保持树的平衡性。

平衡二叉树的常见实现包括 AVL 树和红黑树,它们可以提供在最坏情况下仍保持对数时间复杂度的查找、插入和删除操作。

4. B树(B-Tree):B树是一种自平衡的树结构,它具有以下特点:每个节点可以有多个子节点,每个节点中的键值有序排列,并且每个节点中的键值数量有一个上限和下限。

B树通常用于大规模数据的存储和数据库系统。

5. Trie树(Trie Tree):Trie树,也称为字典树或前缀树,是一种专门用于处理字符串集合的树结构。

Trie树的每个节点都代表一个字符串前缀,通过将字符逐级插入树中,可以高效地完成字符串的和查找操作。

6. 线段树(Segment Tree):线段树是一种用于处理区间查询问题的树结构。

它将要处理的区间划分为一系列离散的线段,并为每个线段创建一个节点。

线段树可以高效地回答关于区间的统计性质,如区间最小值、区间最大值、区间和等。

7. 堆(Heap):堆是一种完全二叉树,它具有以下特点:对于每个节点,它的值都大于等于(或小于等于)它的子节点的值。

堆被广泛应用于优先队列、排序算法(如堆排序)以及图算法中。

编程语言中的高级数据结构

编程语言中的高级数据结构

编程语言中的高级数据结构在计算机编程中,数据结构是指一种组织和存储数据的方式,以及在这些数据上执行操作的算法。

高级数据结构是指相对于基本的数据结构来说,在存储和操作方式上更加复杂和灵活的数据结构。

本文将介绍几种常见的高级数据结构,并探讨它们在编程中的应用。

一、堆(Heap)堆是一种特殊的树状数据结构,它满足以下两个性质:1. 堆是一棵完全二叉树;2. 堆中任意节点的值都必须大于等于(或小于等于)其子节点的值。

堆可以分为最大堆和最小堆两种。

在最大堆中,任意节点的值都大于等于其子节点的值;而在最小堆中,任意节点的值都小于等于其子节点的值。

堆广泛应用于优先队列、排序算法(如堆排序)等领域。

其时间复杂度为O(log n),能够快速找到最大(或最小)值,并且支持高效的插入和删除操作。

二、红黑树(Red-Black Tree)红黑树是一种自平衡的二叉查找树,它满足以下性质:1. 每个节点要么是红色,要么是黑色;2. 根节点是黑色;3. 每个叶子节点(NIL节点,空节点)是黑色的;4. 如果一个节点是红色的,则它的两个子节点都是黑色的;5. 任意节点到其每个叶子节点的路径上包含相同数量的黑色节点。

红黑树的平衡性能非常好,其插入、删除和查找操作的时间复杂度均为O(log n)。

它在诸如关联数组等数据结构的实现中被广泛使用。

三、图(Graph)图是由节点(顶点)和节点之间的边(关系)组成的数据结构。

图的节点可以用于表示实体,而边则表示节点之间的联系。

图可以分为有向图和无向图。

图的应用非常广泛,比如社交网络中的好友关系、电子地图中的路径规划、网络中的路由算法等。

在图的存储和遍历中,有多种算法和数据结构可供选择,如邻接矩阵、邻接表、深度优先搜索(DFS)和广度优先搜索(BFS)等。

四、哈希表(Hash Table)哈希表是一种基于哈希函数实现的数据结构,它可以快速地插入、删除和查找数据。

哈希表包含一个数组和一个哈希函数,通过对数据进行哈希计算得到数组的索引。

数据结构与算法中的红黑树

数据结构与算法中的红黑树

数据结构与算法中的红黑树数据结构是计算机程序设计中的重要组成部分,用于存储和组织数据。

在计算机科学中,算法是解决问题的基础。

红黑树是一种常用的数据结构和算法,被广泛应用于计算机的操作系统、数据库、编译器、图形图像等领域。

本文将对红黑树的定义、实现、应用等方面进行详细介绍。

一、红黑树的定义红黑树是一种自平衡二叉查找树,它满足以下性质:1.每个节点要么是红色,要么是黑色。

2.根节点是黑色的。

3.每个叶节点(NIL节点,空节点)是黑色的。

4.如果一个节点是红色的,则它的两个子节点都是黑色的。

5.对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。

这意味着红黑树是一种平衡二叉查找树,它通过不断的旋转和节点着色来使树保持平衡。

二、红黑树的实现红黑树的实现有两个关键步骤:插入和删除。

①插入操作插入新节点时,首先按照二叉查找树的原则将它放入合适的位置,然后将它的颜色设置为红色。

如果新插入的节点是根节点,则直接将其颜色改为黑色;如果其父节点是黑色的,则不影响红黑树的性质,直接结束操作即可。

如果其父节点是红色的,则需要进行颜色调整。

具体来说,需要根据其祖父节点的颜色和叔父节点的颜色进行分类讨论:1.祖父节点为黑色,则不需要调整。

2.叔父节点是红色,则将父节点和叔父节点颜色都设置为黑色,将祖父节点颜色设置为红色,然后将当前节点指向祖父节点,重新开始操作。

3.叔父节点是黑色或为空,则需要旋转和着色,使得当前节点变成祖父节点,父节点变成红色,原来的祖父节点变成黑色。

此时,如果当前节点已经变成了根节点,则将其颜色设置为黑色,结束操作;否则,继续考虑其父节点的颜色和祖父节点的颜色,重复以上步骤。

②删除操作删除节点时,首先按照二叉查找树的原则找到它,然后根据其子节点的情况进行讨论。

如果删除的节点是叶子节点(没有子节点),直接将其删除即可。

如果删除的节点只有一个子节点,则将其子节点替换为该节点即可。

数据结构中的红黑树与AVL树算法分析

数据结构中的红黑树与AVL树算法分析

数据结构中的红黑树与AVL树算法分析红黑树和AVL树都是常见的自平衡二叉搜索树数据结构,用于在动态插入、删除和查找操作中保持树的平衡。

本文将分析红黑树和AVL 树的算法,包括其定义、插入和删除操作、性能比较等方面。

一、红黑树1.定义红黑树是一种二叉搜索树,它满足以下性质:(1)每个节点要么是红色,要么是黑色。

(2)根节点是黑色。

(3)每个叶子节点(NIL节点,空节点)是黑色。

(4)如果一个节点是红色的,则它的子节点必须是黑色的。

(5)对于任意节点,从该节点到其子孙节点的所有路径上包含相同数目的黑色节点。

2.插入操作插入操作是红黑树中最复杂的操作之一,其大致步骤如下:(1)将新节点插入到树中,类似于二叉搜索树的插入。

(2)将插入的节点着为红色。

(3)根据红黑树的性质进行调整,以保持树的平衡。

具体调整的规则如下:a.如果插入的节点是根节点,将其变为黑色。

b.如果插入的节点的父节点是黑色,不需要调整。

c.如果插入的节点的父节点是红色:i.如果插入的节点的叔叔节点是红色,重新着色以保持红黑树的性质。

ii.如果插入的节点的叔叔节点是黑色,通过旋转操作来保持红黑树的性质。

3.删除操作删除操作也是红黑树中比较复杂的操作之一,其大致步骤如下:(1)找到要删除的节点,类似于二叉搜索树的查找。

(2)如果要删除的节点有两个子节点,则找到其后继节点(即右子树中最小的节点)来替代要删除的节点。

(3)如果要删除的节点为红色,则直接删除,不会违反红黑树的性质。

如果要删除的节点为黑色,则需要进行进一步的调整,以保持红黑树的性质。

(4)根据删除节点的颜色和兄弟节点的颜色进行调整,具体调整的规则如下:a.如果删除的节点是红色,直接删除,不需要调整。

b.如果删除的节点是黑色,将其替代节点的颜色设置为黑色,然后判断替代节点的兄弟节点的颜色:i.如果兄弟节点是红色,进行旋转和重新着色操作。

ii.如果兄弟节点是黑色,判断兄弟节点的子节点的颜色:1.如果兄弟节点的两个子节点都是黑色,重新着色并递归地将其父节点作为新的删除节点。

计算机科学公开课高级数据结构与算法

计算机科学公开课高级数据结构与算法

计算机科学公开课高级数据结构与算法简介:计算机科学领域的高级数据结构与算法是指在数据处理过程中使用的复杂数据结构和高效算法。

本文将介绍一些常用的高级数据结构与算法,包括红黑树、哈夫曼编码、图算法等。

一、红黑树红黑树是一种自平衡的二叉查找树,它的特点是在插入和删除操作后能保持树的平衡,从而保证了查找操作的时间复杂度为O(log n)。

红黑树的节点可以是红色或黑色,通过一定的规则来维持平衡性。

红黑树的基本操作包括左旋、右旋、变色等。

在插入节点时,需要进行相应的旋转和变色操作来维护红黑树的性质。

通过合理的左旋和右旋操作,可以使得红黑树保持平衡。

二、哈夫曼编码哈夫曼编码是一种用于无损数据压缩的编码方式。

它是基于构建一棵哈夫曼树来实现的。

哈夫曼树是一种树状结构,将出现频率较高的字符用较短的编码表示,而出现频率较低的字符则用较长的编码表示,从而实现了对数据的压缩。

哈夫曼树的构建过程包括以下几步:1. 统计字符出现的频率,并将每个字符作为一个叶子节点插入优先队列中。

2. 每次从优先队列中取出两个频率最低的节点,合并它们,生成一个新的节点。

3. 将新生成的节点插入优先队列中,重复上述步骤,直到只剩下一个节点,即为哈夫曼树的根节点。

通过哈夫曼树的构建过程,我们可以得到每个字符对应的哈夫曼编码,从而实现了数据的压缩和解压缩过程。

三、图算法图是一种由节点和边组成的数据结构,它是用来描述对象之间的关系的。

在计算机科学中,图被广泛应用于解决各种问题,比如最短路径问题、连通性问题等。

最短路径问题是指在图中找到两个节点之间最短路径的问题。

著名的Dijkstra算法是一种解决最短路径问题的算法,它采用了贪心的策略,在每一步选择距离起始节点最近的节点进行扩展。

另一个常见的图算法是深度优先搜索(DFS)和广度优先搜索(BFS)。

DFS通过递归的方式遍历图的所有节点,而BFS则通过队列的方式来实现。

这两种算法可以用于图的遍历和连通性问题的解决。

数据结构:二叉树、平衡二叉树、红黑树详解

数据结构:二叉树、平衡二叉树、红黑树详解

数据结构:⼆叉树、平衡⼆叉树、红⿊树详解⼀、⼆叉树(binary tree)指每个节点最多含有两个⼦树的树结构。

时间复杂度为O(log N),在退化成链表的情况下时间复杂度为O(N)。

特点:1.所有节点最多拥有两个⼦节点;2.节点的左⼦树只包含⼩于当前根节点的数,节点的右⼦树只包含⼤于当前根节点的数。

缺点:只会以我们第⼀次添加的节点为根节点,如果后⾯添加的节点值都⼤于或⼩于根节点的值,在这种情况下会退化成链表。

⼆、平衡⼆叉树(Balanced Binary Tree)⼜称为AVL树,具有⼆叉树的全部特性,解决⼆叉树退化成链表情况的问题,每个节点的左⼦树和右⼦树的⾼度之差不会超过1,AVL树是严格的平衡⼆叉树,追求完全平衡,⽐较严格。

缺点:由于要求每个节点的左⼦树和右⼦树⾼度之差不超过1,这个要求⾮常严格,追求完全平衡,这就导致了在频繁插⼊和删除的场景中,可能就会导致AVL树失去平衡,AVL树就需要频繁的通过左旋右旋使其重新达到平衡,这时就会时得其性能⼤打折扣。

三、红⿊树和AVL树相⽐,红⿊树放弃追求完全平衡,⽽是追求⼤致平衡,保证每次插⼊节点最多只需要三次旋转就能达到平衡,维持平衡的耗时较少,实现起来也更为简单,它的旋转次数较少,对于频繁插⼊和删除操作的场景,相⽐AVL树,红⿊树更具优势。

特征:1.红⿊树是也是平衡⼆叉树实现的⼀种⽅式2.节点只能是⿊⾊或者红⾊,root根节点⼀定是⿊⾊3.新增时默认新增的节点是红⾊,不允许两个红⾊节点相连4.红⾊节点的两个⼦节点⼀定是⿊⾊红⿊树变换规则三种规则:1.改变节点颜⾊2.左旋转3.右旋转变⾊的情况:当前节点的⽗亲节点是红⾊,并且它的祖⽗节点的另外⼀个⼦节点(叔叔节点)也是红⾊:以当前节点为指针进⾏操作1.将⽗亲节点变为⿊⾊2.将叔叔节点变为⿊⾊3.将祖⽗节点变为红⾊4.再把指针定义到祖⽗节点进⾏旋转操作左旋转:当⽗亲节点为红⾊情况,叔叔节点为⿊⾊情况,且当前节点是右⼦树,左旋转以⽗节点作为左旋。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 • 另外,如果p(v)与u都是红色的,那么性质 4也会遭到破坏。但实际上我们解决性质 5遭 到破坏的方案在不用作任何额外工作的情况 下就可以同时解决性质 4 遭到破坏的问题, 所以从现在开始我们将集中精力考虑性质 5 的问题。
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树 • 线段树定义 一棵二叉树,记为T(a,b),参数a,b 表 示该节点表示区间[a,b]。区间的长度b-a 记为L。递归定义T[a,b]:若L>1 : [a,(a+b) div 2]为T的左儿子 [(a+b) div 2,b]为T 的右儿子。 若L=1 :T 为一个叶子节点。
8 红黑树及线段树
• 红黑树插入 • 考虑下端红色结点的叔叔结点为红色的情 况。在这种情况下我们将上端红色结点和它 的兄弟结点染为黑色并且将它们的父结点染 为红色。树的结构并没有进行调整。 • 这时根据下端红色结点是其父结点的左子 结点还是右子结点以及上端红色结点是其父 结点的左子结点还是右子结点可以分出四种 情况,但是这四种情况从本质上来说都是相 同的。
8 红黑树及线段树
8 红黑树及线段树
• CLRS方法与Okasaki方法比较 • 它们有两点不同。第一点是关于如何对最 终的子树进行染色的。在 Okasaki 方法中, 这颗子树的根结点 y 被染成红色而它的子结 点被染成黑色,然而在 CLRS 方法中 y 被染成 了黑色而它的子结点被染成了红色。 • 将y染成黑色意味着对树的调整不需要向根 结点的方向继续进行下去 。在此情况下, CLRS 插入方法最多需要进行两次旋转操作即 可完成插入。
8 红黑树及线段树
• 红黑树删除 • 我们要区分四种不同的情况: • A. 如果u结点是红色的或者它是树的根结 点(或两者皆是),只要将它染为黑色就可 以完成删除操作。在余下的情况里,我们可 以假设这个带记号的结点u是黑色的,并且 不是根结点。
8 红黑树及线段树
• 红黑树删除 B. 如果这个双黑色结点的兄弟结点以及两个 侄子结点都是黑色的,那么我们就将它的兄 弟结点染为红色之后将这个记号朝树根的方 向移动一步。
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 • 但出于重建红黑树性质的目的,我们只关 心最终被删除的那个结点。我们称这个结点 为v,并称它的父结点为p(v)。 • v的子结点中至少有一个为叶结点。如果 v有一个非叶子结点,那么v在这颗树中的位 臵将被这个子结点取代;否则,它的位臵将 被一个叶结点取代。
8 红黑树及线段树
高级算法与数据结构
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树(RB树) 一棵红黑树本身是一棵二叉排序树。且满 足下列性质: (1)每一个结点必须是红或黑两者之一; (2)所有叶子结点是黑色的; (3)每一个结点是红色的,则它的孩子结点 必须是黑色的; (4)每一个结点到所有叶子结点路径所经过 的黑色结点数目相同。
8 红黑树及线段树
8 红黑树及线段树
□ 线段树 • 表示区间[1, 10] 的线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的引入
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的引入
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的引入
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的引入
8 红黑树及线段树
• 红黑树(RB树)
8 红黑树及线段树
8 红黑树及线段树
• 红黑树插入-Okasaki方法
8 红黑树及线段树
在旋转操作中<AxByC>的顺序保持不变。
8 红黑树及线段树
• 红黑树插入-Okasaki方法(旋转)
8 红黑树及线段树
• 红黑树插入-CLRS方法
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树解题一般方法 3、树的每个节点根据题目所需,设臵变量 记录要求的值。 4、用树形结构来维护这些变量:如果是求 总数,则是左右儿子总数之和加上本节点 的总数,如果要求最值,则是左右儿子的 最值再联系本区间。利用每次插入、删除 时,都只对O(logL) 个节点修改这个特点 ,在O(logL) 的时间内维护修改后相关节 点的变量。
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 D. 最终,我们遇到了双黑色结点有一个黑色 兄弟结点并至少一个侄子结点是红色的情况。 这种情况下我们生成了一个额外的黑色结点, 记号被丢掉,删除操作完成。 • 将上面的所有情况综合起来,我们可以看 出在最坏的情况下我们必须沿着从叶结点到 根结点的路径每次都执行常量次数的操作, 因此删除操作的时间复杂度为O(log n)。
• 红黑树插入4—插入点z
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 标准二叉搜索树的删除操作的三种情况: 1. 要删除的结点没有子结点。在这种情况下, 我们直接将它删除就可以了。如果这个结点 是根结点,那么这颗树将成为空树;否则, 将它的父结点中相应的子结点指针赋值为 NULL
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树解题一般方法 5、在非规则删除操作,和大规模修改数据 操作中,要灵活的运用子树的收缩与叶子 节点的释放,避免重复操作。
8 红黑树及线段树
8 红黑树及线段树
本课结束
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树解题一般方法 1、分析题目,了解题目的区间性。 2、根据题目要求将一个区间建成线段树, 一般的题目都需要对坐标离散。建树时, 不要拘泥于线段树这个名字而只将线段建 树,只要是表示区间,而且区间是由单位 元素(可以是一个点、线段、或数组中一个 值)组成的,都可以建线段树;不要拘泥于 一维,根据题目要求可以建立面积树、体 积树等等。
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
□ 线段树的应用8 红Fra bibliotek树及线段树8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 • 很显然,只有带记号的结点的两个侄子结 点都是黑色时才能进行上述操作,这是因为 如果有一个侄子结点是红色的那么该操作会 导致出现两个相邻的红色结点。 • C. 如果带记号的结点的兄弟结点是红色的, 那么我们就进行一次旋转操作并改变结点颜 色。
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的性质
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的维护
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的维护
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
□ 线段树的应用
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• CLRS方法与Okasaki方法比较 • 第二点不同是在这种情况下 CLRS 方法必须 满足一个先决条件,即下端红色结点的叔叔 结点必须是黑色的。如果那个叔叔结点是红 色的,那么最终的树中将存在两个相邻的红 色结点,因此这种方法不能适用于叔叔结点 为红色的情况。
8 红黑树及线段树
• 红黑树删除
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 • 由于这个记号比起操作前离树的根结点更 远了,所以看起来似乎我们向后倒退了。但 请注意现在这个双黑色结点的父结点是红色 的了,所以如果下一步操作属于情况 B ,那 么这个记号将会向上移动到那个红色结点, 然后我们只要将它染为黑色就完成了。
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树插入
8 红黑树及线段树
8 红黑树及线段树
• 红黑树插入1—插入点z
8 红黑树及线段树
• 红黑树插入2—插入点z
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树插入3—插入点z
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
8 红黑树及线段树
• 红黑树删除 • 我们用u来表示二叉搜索树删除操作后在树 中取代了v的位臵的那个结点。如果u是叶结 点,那么我们可以确定它是黑色的。 • 如果v是红色的,那么删除操作就完成了。 因为这种删除不会破坏红黑树的任何性质。 • 所以,我们下面假定 v 是黑色的。删除了 v 之后,这会破坏红黑树的性质5。
相关文档
最新文档