数据结构与算法 / 红黑树
一、定义
- 根节点是黑色的。
- 叶子节点是空的且是黑色的。
- 任何相邻的节点不能都为红色。
- 任意节点到其每个叶子节点的路径上,黑色的节点的数量相同。
二、性质
红黑树解决了 AVL 树增、删时耗时过大的问题。
因为,定义中 3 和 4 使得红黑树的根节点到叶子节点的最长的可能路径不多于最短的可能路径的两倍长,导致该树是大致平衡的树,所以对于增、删的操作没有那么的严格。
三、时间复杂度
增、删、查的时间复杂度的平均和最坏都维持在O(logn),推导过程如下链接。
https://mp.csdn.net/postedit/103172135
四、源码
相关代码参考 linux 内核中红黑树的实现。
五、树的演化
六、拓展
1、根节点为什么必须是黑色的?
主要还是因为性质 3 和 4 。假设树只有两个节点(5)和(2),并且根节点设置为红色且子节点不能为红色,那么红黑树如下所示:
尴尬,不满足性质 4 。所以需要旋转,使其满足。结果如下所示:
既然如此,可以直接规定根节点必须为黑色。
参考:极客时间《数据结构与算法之美》王争
这门课真心推荐,内容很经典、栗子很形象,里面还包含了很多面试题目。真是居家旅行必备良药。
(SAW:Game Over!)
数据结构与算法 / 红黑树相关推荐
- 高级数据结构与算法 | 红黑树(Red-Black Tree)
文章目录 红黑树 红黑树的概念 红黑树的性质 红黑树与AVL树 红黑树的实现 红黑树的节点 红黑树的插入 红黑树的查找 红黑树的验证 完整代码 红黑树 红黑树的概念 红黑树,是一种二叉搜索树,但在每个 ...
- 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
欢迎点赞评论+关注~~~~~~~ 如上图,二叉查找树极端情况下可能会变成一个单链表,这种查询时间复杂度就变成O(n)了,红黑树在二叉查找树的基础上进行了自平衡. 1.原理分析 如上图,红黑树具有以下特 ...
- 数据结构之「红黑树」
红黑树 红黑树(Red–black tree)是一种自平衡二叉查找树.红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色. 红黑树的特性: 1.节点要么是红色要么就是黑色,不能没有颜色. 2 ...
- 数据结构 - 学习笔记 - 红黑树
数据结构 - 学习笔记 - 红黑树 定义 简介 知识点 1. 结点属性 2. 前驱.后继 3. 旋转 查找 插入 父结点为黑色 父结点为红色 1. 有4种情形只需要变色(对应234树4结点) 1.1. ...
- 数据结构拾遗(1) --红黑树的设计与实现(上)
红黑树是一种自平衡的二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组(C++ STL 中的map/set).它是在1972年由Rudolf Bayer发明的,他称之为" ...
- MySQL索引数据结构二叉树、红黑树、B-Tree、B+Tree、Hash
索引:帮助MySQL高效获取数据的有序的数据结构. 假设我们有一张表table,包含Clo1和Clo2两个字段 内存地址 Clo1 Clo2 0x07 1 36 0x5A 2 20 0x7A 3 80 ...
- Java之HashMap经典算法-红黑树(插入节点平衡调整,左旋转,右旋转)
1. 红黑树的优势 有了二叉搜索树,为什么还需要平衡二叉树? 二叉搜索树容易退化成一条链,这时,查找的时间复杂度从 O(log2N)O(log_2N)O(log2N) 将退化成 O(N)O(N )O ...
- 数据结构拾遗(3) --红黑树的设计与实现(下)
完整源代码: http://download.csdn.net/detail/hanqing280441589/8450041 红黑节点设计与实现 template <typename Comp ...
- 数据结构拾遗(2) --红黑树的设计与实现(中)
Insert完善 根据规则4, 新增节点必须为红; 根据规则3, 新增节点之父节点必须为黑. 示例: (1)插入16(红色)/55(红色), 则既不用旋转, 也不用重新染色 (2)插入82(红色), ...
最新文章
- ST-Link VCP Ctrl驱动安装失败解决(win7 64bits)
- Linux - alias 定义的变量
- 苹果x人脸识别突然失灵_教你解决mac电脑键盘失灵的问题
- log4c移植到android,使用Android Studio调用C++ 代码-log4cplus
- 小心:光缆损毁 敲诈病毒现身互联网
- 【SICP练习】142 练习3.77
- 《概率论与数理统计》再学习之事件的互斥(互不相容)和独立的关系
- [ 重 新 预 习 ] Node.js搭建服务
- MATLAB程序设计与应用 4.1 M文件
- WebDay18 MySQL存储过程 存储函数 触发器 事务
- CHM文件无法打开的解决方法
- 嵌入式Linux系统移植的四大步骤(详细长文,慎入!)
- Explain how shipping point is determined?
- Delphi获取android 文件路径,发一个Delphi 从 .lnk 文件获取真正路径的程序
- python图片字符分割_图像分割python
- 百度宣布搜索公司总裁向海龙离职 沈抖晋升为高级副总裁
- LaTex常用的一些语法【超实用-新手入门】
- linux top显示CPU占用高,Steal高
- Spring data JPA -针对一对多关系中,分页查询一的一方部分,但查询条件中有多的一方参数
- 中望CAD2022安装教程(详细图文安装教程+全网首发)