数据结构与算法——红黑树(Red Black Tree)
数据结构与算法——红黑树(Red Black Tree)
红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组;红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。
红黑树是一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能;它虽然是复杂的,但它的最坏情况运行时间也是非常良好的,并且在实践中是高效的: 它可以在O(log n)时间内做查找,插入和删除,这里的n 是树中元素的数目。
红黑树的性质
- 每个节点非红即黑
- 根节点是黑的;
- 每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;
- 如图所示,如果一个节点是红的,那么它的两儿子都是黑的;
- 对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;
红黑树的插入
1. 插入的是根节点
原树是空树,此情况只会违反性质2,直接将次结点涂为黑色
2. 插入的结点的父结点是黑色
此时的插入不会违反红黑的任何性质,直接插入
3. 当前结点的父结点是红色且祖父结点的另一个子节点是红色
此时将当前结点的父结点和叔叔节点涂黑,祖父结点涂红;
把当前结点指向祖父结点,从新的当前结点重新开始计算。
变换前:
变换后:
4. 当前结点的父结点是红色,叔叔结点是黑色,当前结点是其父结点的右子树
当前结点的父结点作为新的当前结点,以新当前结点为支点进行左旋。
变换前:
变换后:
5. 当前结点的父结点是红色的,叔叔结点是黑色的,当前结点是其父结点的左子树
此时将父结点变为黑色,祖父结点变为红色,祖父结点作为支点进行右旋。
变换前:
变换后:
数据结构与算法——红黑树(Red Black Tree)相关推荐
- 高级数据结构与算法 | 红黑树(Red-Black Tree)
文章目录 红黑树 红黑树的概念 红黑树的性质 红黑树与AVL树 红黑树的实现 红黑树的节点 红黑树的插入 红黑树的查找 红黑树的验证 完整代码 红黑树 红黑树的概念 红黑树,是一种二叉搜索树,但在每个 ...
- 红黑树Red/Black Tree
红黑树Red/Black Tree 建立二进制搜索树,我们得到红/黑树,旨在解决BST可能变得不平衡的问题.(BST[二叉搜索树],是对于任意的node x,如果node y是node x的左边的节点 ...
- 数据结构--红黑树 Red Black Tree
文章目录 1.概念 2.操作 2.1 左旋.右旋(围绕某个节点的左/右旋) 2.2 插入 2.3 删除 3. 代码 1.概念 二叉树在频繁动态增删后,可能退化成链表,时间复杂度由 O(lgn) 变成 ...
- 红黑树(Red Black Tree)详解
红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 红黑树是在1972年由Rudolf Bayer发明的,当时被称为 ...
- 数据结构与算法 / 红黑树
一.定义 根节点是黑色的. 叶子节点是空的且是黑色的. 任何相邻的节点不能都为红色. 任意节点到其每个叶子节点的路径上,黑色的节点的数量相同. 二.性质 红黑树解决了 AVL 树增.删时耗时过大的问题 ...
- 父子结构查询_Java面试准备(5)之数据结构与算法——红黑树
欢迎点赞评论+关注~~~~~~~ 如上图,二叉查找树极端情况下可能会变成一个单链表,这种查询时间复杂度就变成O(n)了,红黑树在二叉查找树的基础上进行了自平衡. 1.原理分析 如上图,红黑树具有以下特 ...
- 红黑树(Red Black Tree)超详细解析
红黑树详解 什么是红黑树? 红黑树,是一种二叉搜索树的特化,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black. 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确 ...
- 红黑树(Red–black tree)
一.红黑树的概念: 在计算机科学中,红黑树是一种自平衡二叉搜索树.每个节点存储一个表示"颜色"("红"或"黑")的额外位,用于确保树在插入和 ...
- 数据结构——红黑树(red-black tree)
RB-tree(红黑树)是一种平衡二叉搜索树,它每个节点上增加了一个存储位来表示节点的颜色,可以是 Red 或 Black,故得名.通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树能 ...
- 数据结构之「红黑树」
红黑树 红黑树(Red–black tree)是一种自平衡二叉查找树.红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色. 红黑树的特性: 1.节点要么是红色要么就是黑色,不能没有颜色. 2 ...
最新文章
- 基于GAN的单目图像3D物体重建(纹理和形状)
- c++读取.dat文件_MySQL 数据文件类型
- JAVA WEB开发环境搭建教程
- codevs 5966 [SDOI2017]硬币游戏
- AD画封装的血泪教训:有叉的放在外侧
- 面试官:谈谈 Tomcat 架构及启动过程,我一脸懵逼。。
- Netty自带的心跳机制——IdleStateHandler
- 无线桥接dhcp服务器不启动,TP-Link路由器桥接提示“获取IP地址失败,请检查DHCP是否开启...
- Java double value_Java Double doubleValue()用法及代码示例
- EFF 测试 Privacy Badger,禁止第三方跟踪
- 智慧城市智能化建设发展现状及展望
- git上传到阿里云code
- WPF基础五:UI②内容元素Frame
- 3dmax骨骼的绑定
- JVM性能调优3_垃圾收集器与内存分配策略__享学课堂
- 一张图了解数字经济产业链图谱
- Astah 9.0升级步骤(Widnows/Mac OS)
- 跨 AZ 部署最佳实践之 Zookeeper
- 实力上榜|海泰方圆跻身2022企业网络安全服务Top15
- C语言学习及复习笔记-【5】C 运算符
热门文章
- python火车票票价_python的requests库爬取火车票信息和所需价钱
- 按键精灵输出中文乱码,输出不是?,输出如Ö16:48ÀÂ
- 怎么把ppt弄成链接的形式_怎么把ppt改成pptx_把pptx转换成ppt的方法
- 计算机应用能力考试ppt2003,全国专业技术人员计算机应用能力考试_PPT_2003_题库版...
- hadoop 查看文件大小以及文件数
- 安卓psp模拟器联机教程_谁知道手机版的ppsspp模拟器怎么联机啊?
- 虚拟机macos系统共享文件
- python百钱买百鸡问题答案_Python学习-算法-百钱买百鸡的问题
- 支付宝APP参数SDK转换URL网页链接
- Pimple Containter 容器使用实例代码