红黑树算法原理及实现
红黑树
一、简介
红黑树(Red Black Tree)是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉树的平衡,从而获得较高的查找性能。
它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
二、红黑树的特征
- 节点都有颜色( 在红-黑树中,每个节点的颜色或者是黑色或者是红色的。当然也可以是任意别的两种颜色,这里的颜色用于标记,我们可以在节点类Node中增加一个boolean型变量isRed,以此来表示颜色的信息 )
- 在插入和删除的过程中,要遵循保持这些颜色的不同排列规则,在插入或者删除一个节点时,必须要遵守的规则称为红-黑规则 :
- 每个节点不是红色就是黑色
- 根节点总是黑色
- 如果节点是红色,那他的子节点必须是黑色的(反之不一定, 也就是从每个叶子到根的所有路径上不能有两个连续的红色节点)
- 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色亮度)
三、红黑树的自我调整:
颜色调整
结构调整:
①左旋(Rotate Left):如下图,左旋的过程是将右子树饶x逆时针旋转,使得x的右子树成为x的父亲,同时修改相关节点的引用。旋转之后,红黑树的基本属性仍然满足。
②右旋(Rotate Left):如下图,右旋的过程是将x的左子树绕x顺时针旋转,使得x的左子树成为x的父亲,同时修改相关节点的引用。旋转之后,二叉查找树的属性仍然满足。
四、红黑树代码实现:
- github地址: 红黑树算法实现
红黑树算法原理及实现相关推荐
- 红黑树算法原理(从二叉搜索树讲起)
原文:红黑树深入剖析及Java实现,本文修改了原文的一些小错误,如果想看红黑树的Java实现可以到原文去看. 红黑树是平衡二叉查找树的一种.为了深入理解红黑树,我们需要从二叉查找树开始讲起. BST ...
- linux算法设计,红黑树的原理分析和算法设计
红黑树是60年代中期计算机科学界找寻一种算法复杂度稳定,容易实现的数据存储算法的产物.在优先级队列.字典等实用领域都有广泛地应用,更是70年代提出的关系数据库模型--B树的鼻祖.在Linux kern ...
- 左倾红黑树的原理及简单实现
(注:以下图片全部源于<算法 第4版>) 左倾红黑树的原理及简单实现 左倾红黑树的简介 左倾红黑树的定义 左倾红黑树与2-3树的对比 左倾红黑树的颜色表示 左倾红黑树的一些基本操作 1.颜 ...
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现--转
TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常 ...
- python:实现红黑树算法(附完整源码)
python:实现红黑树算法 from __future__ import annotations from collections.abc import Iterator class RedBlac ...
- 红黑树结构原理的图文讲解(非代码)
1.引言 HashMap的基本结构是数组,链表和红黑树.以数组为基本形态,数组中的元素先以链表形式储存,当链表的长度超过8时(包含数组上的那个链表头)就会将链表转换为红黑树,以加快修改和查询效率.当然 ...
- 红黑树 之 原理和算法详细介绍
概要 目录 1 红黑树的介绍 2 红黑树的应用 3 红黑树的时间复杂度和相关证明 4 红黑树的基本操作(一) 左旋和右旋 5 红黑树的基本操作(二) 添加 6 红黑树的基本操作(三) 删除 作者:Sk ...
- 红黑树的原理_红黑树插入算法实现原理分析
引言 红黑树是在实际工程中被广泛应用的一种数据结构,比如Linux中的线程调度就是使用的红黑树来管理进程控制块,而Nginx中也是使用红黑树来管理的timer,Java中的TreeMap和Tree ...
- 红黑树动画+红黑树算法详细介绍
说起红黑树,先给一个js的实现.可以动画看效果 https://www.cs.usfca.edu/~galles/visualization/RedBlack.html 然后算法问题,我再描述一遍也没 ...
最新文章
- html css盒子顶层,HTML学习之四CSS盒子
- .Net Core 3.1,这匹黑马,2020年值得所有程序员重视!
- php 编写线程教程,php 实现多线程
- mysql sysdate 格式化_MySQL函数汇总
- 为什么单击用户账户没有反应_win10用户获取最高权限的方法
- mybatis批量删除提示类型错误
- hibernate使用sql语句查询实体时,要写上addEntity
- 更换Homebrew的更新源
- jQuery - 选择器(五)
- wamp下安装php的xdebug调试的方法
- 【心电信号】基于matlab心电信号特征提取+分析处理【含Matlab源码 289期】
- WPS 关闭热点推送通知
- Gartner发布《2021年RPA魔力象限》,两家中国企业首次入选,开创历史!
- U盘插入后只显示安全删除硬件问题
- java 数字翻译成英文_【Java】 剑指offer(46) 把数字翻译成字符串
- 为效率而生-开源Mac版Google Authenticator认证客户端GoldenPasspor
- 集团公司预算控制与网上费用报销系统
- 【Spring】JdbcTemplate常用方法使用示例
- 数字逻辑 课程设计 多功能电子钟 Quartus II
- centos8 免密登录