红黑树
来源:互联网 发布:阿里云储存空间不足 编辑:程序博客网 时间:2024/06/05 20:02
一,什么是红黑树?
红黑树是一颗追求局部平衡的二叉查找树,红黑树的每个节点上都有存储位表示节点的颜色。
二,红黑树的性质
1,每个节点是黑色或者红色。
2,根节点是黑色。
3,每个叶子节点(NIL)是黑色。(注意:这里的叶子节点是为NULL的叶子节点)
4,如果一个节点是红色的,它的孩子节点必须是黑色。
5,从一个节点到该节点的叶子节点的所有路径上,包含相同数目的黑色节点。性质5确保没有一条路径比其他路径长出2倍,因而,红黑树是追求局部平衡的二叉树。
三,与红黑树相关的定理
一颗含有n个节点的红黑树的高度做多为2log(n + 1)。
四,红黑树的插入操作
(1),将红黑树当做一颗二叉查找树,将节点插入。
(2),将插入的节点标记为红色。将插入的节点标记为红色,此时唯一可能违背的是性质4。违背的性质越少,要处理的情况就越少,因此把节点标记为红色。
(3),通过一系列的旋转或着色操作,使之重新成为一颗红黑树。
可以根据插入节点的父节点的情况,可以划分下面三种情况来处理。
情况一:插入的节点作为根节点,直接把插入的节点标记为黑色。
情况二:插入的节点的父节点是黑色,什么都不需要做,节点插入之后仍然是一颗红黑树。
情况三:插入节点的父节点是红色,此时违背性质4。此时,可以分三种情况分别来处理。
情况一:插入节点的父节点是红色,叔叔节点是红色。
处理方法:
(1),将父节点标记为黑色。
(2),将叔叔节点标记为黑色。
(3),将祖父节点标记为红色。
(4),将祖父节点标记为"当前节点",之后继续对"当前节点"进行处理。
情况二:插入节点的父节点是红色,且当前节点是其父节点的右孩子。
处理方法:
(1),将父节点作为"当前节点"。
(2),以"当前节点"为支点左旋。
情况三:插入节点的父节点是红色,且当前节点是其父节点的左孩子。
处理方法:
(1),将父节点标记为黑色。
(2),将祖父节点标记为红色。
(3),以祖父节点为支点进行右旋。
五,红黑树的效率
查找操作的时间复杂度与树的深度成正比,故对红黑树的查找,最坏情况下的时间复杂度为O(log)。若考虑到红黑树的动态查找特性,即在查找失败时插入该节点,这时最坏的情况是发生树的形状连续调整,但是调整次数不会超过树的深度,故时间复杂性仍保持为O(log)。综上所述,红黑树是一种高效的查找树。
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- 红黑树
- php 栈操作匹配括号( )
- nodejs使用multer中间件上传混合表单提交(文件和非文件普通文本域)
- react-native-vector-icons使用(二)
- 几个Linux函数的使用
- Java读取文件内容的几种方式
- 红黑树
- 搜索--04
- mysql 事务 MySQL视图
- windows设置MongoDB服务
- VPN账号可以两个人同时连接吗
- 第十届河南省acm省赛参赛总结
- centos 中修改语言的方法
- SQLServer中通过intersect,union,except和三个关键字对应交、并、差三种集合运算。
- 利用django中redisco库,修改redis模型导致数据无法保存以及部分其他问题