数据结构-红黑树

1.容器

容器用于容纳元素集合,并对元素集合进行管理和维护.

传统意义上的管理和维护就是:增,删,改,查.

我们分析每种类型容器时,主要分析其增,删,改,查动作实现,及复杂度.

2.红黑树

2.1.结构

2.1.1.图解

红黑树是容器类型.

其元素组织采用二叉树结构.

上图是一个包含五个元素的二叉树.

二叉树容器内元素间具备兄弟,父子关系.这种关系通过每个节点内三个指针来维护,它们是:

(1). 指向节点父节点指针

(2). 指向节点左孩子节点指针

(3). 指向节点右孩子节点指针

为了发挥出这类容器的优势,红黑树在二叉树基础上增加了多个一致性约束.这些一致性约束可分为两种类型.

一种类型为了元素有序,一种类型为了树中任意节点左子树,右子树的高度平衡.

(1). 服务于元素有序的一致性约束

对树中任意节点p

p的左孩子节点lp存在,则以lp为根子树中所有节点内元素均小于p节点内元素.

p的右孩子节点rp存在,则rp为根子树中所有节点内元素均大于p节点内元素.

通过这个一致性约束,我们保证了二叉树的有序性,但这个性质给我们带来的好处是什么呢?

通过该性质,在二叉树中查找元素时候,我们可以运用二分查找加快查找速度.

上述二叉树满足有序的约束.我们若在其中查找值为5的元素.

二分查找过程如下:

(1). 初始查找节点为根节点

(2). 判断当前节点p5关系.

a. p中元素小于5,由于有序性质,只能将当前节点p设置为p的右孩子继续查找.

b. p中元素大于5,由于有序性质,只能将当前节点p设置为p的左孩子继续查找.

c. p中元素等于5,则找到,停止迭代.

d. p为空指针,查找结束,树中不存在匹配节点.

(2). 服务于树中任意节点左子树,右子树高度平衡的一致性约束.

a. 任意节点需要携带颜色标记,颜色标记要么为红色,要么为黑色.

b. 树的根节点的颜色标记必须为黑色.

c. 对树中任意节点p,若p的父节点pp存在且颜色标记为红色,则p的颜色标记必须为黑色.

d. 对树中任意节点pp的左子树的黑高和p的右子树的黑高必须一致.

上图是一个包含五个元素的红黑树.

首先,这棵树是一颗二叉树.

然后,这棵树满足有序的一致性约束.

最后,这棵树满足关于高度平衡的一致性约束.

如何确定树的黑高:

由于红黑树一致性约束规定了树中任意节点的左子树,右子树黑高一致.

为了得到树的黑高,我们只需确定一条从根节点到叶子节点的路径,然后统计此路径上颜色标记为黑色的节点个数即可.

通过平衡性的一致性约束,可以带给我们什么好处呢?

给定一个红黑树.

a. 其根节点为pp的左孩子为lpp的右孩子为rp

b. 容器内元素总数为n

c. 树的黑高为h

对一个黑高为h的树来说,极端情况下,该树内所有节点颜色标记均为黑色下,该树中的节点数量最少.

由于任意节点左,右子树黑高一致的约束.此时,树中节点全黑的树,只能是一颗满二叉树.

满二叉树下,给定高度h,可以计算树中节点总数= 2 0 2^{0} 20 + 2 1 2^{1} 21 + ... + 2 h − 1 2^{h-1} 2h−1= 2 h 2^{h} 2h-1.

这样存在hn之间存在下面的关系: 2 h 2^{h} 2h-1 <= n

可以简化为h <= log2为底n+1的对数.

又因为父节点颜色标记为红色,子节点颜色标记必须为黑色的约束.

所以,给定一颗黑高为h的红黑树,从根节点到叶子节点理论上最长的一条路径只能是,路径上交替出现黑色-红色这样的情况.此情况下,理论上根节点到叶子节点最长路径的高度为:2h

这样,当我们满足平衡约束时,我们获得的好处是:

可以确定根节点到叶子节点最长的一条路径高度小于等于2*log2为底n+1的对数.

2.1.2.存在一致性约束容器特点

(1). 插入无需提供位置信息.

(2). 不支持直接原地修改.一般分解为移除,添加两个过程.

(3). 由于元素值决定其位置,这类容器一般插入元素时,一般以std::pair<key, value>形式插入.即元素包含键,值两部分.键用来实现一致性约束.值是此键关联的实际内容.

相关推荐
zander2584 小时前
4. 寻找两个正序数组的中位数:用分割点代替合并
数据结构·算法
敲上瘾5 小时前
redis常用数据类型与操作方法
数据结构·数据库·redis·缓存
牢姐与蒯6 小时前
c++高级数据结构之图(基本概念,存储结构,BFS,DFS,最小生成树)
数据结构·c++·
Tongzhi20266 小时前
考勤数据本地化存储:通芝科技无感考勤一体机的数据安全逻辑
大数据·数据结构·科技·均值算法·数据库开发·推荐算法
她说可以呀7 小时前
Spring-ai-Rag-多文件格式生成 List<Document>
数据结构·list
郝学胜_神的一滴8 小时前
干货版《算法导论》17:双数极值配对与卡牌手牌编码最优解
数据结构·算法
我不会插花弄玉9 小时前
10.list【由浅入深-C++】
数据结构·c++·list
星轨初途10 小时前
LeetCode 热题 100——day6 三数之和
数据结构·c++·算法·leetcode·职场和发展
wabs66619 小时前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网
Tongzhi202620 小时前
从部署到运维:通芝科技无感考勤一体机的全流程效率解析
运维·数据结构·科技·算法·贪心算法