红黑树(学习笔记)

1.为什么要提出红黑树?

二叉查找树的查找、插入、删除时间复杂度都是O(h),其中h是树的高度。假设二叉查找树的结点个数是n,如果二叉查找树比较平衡,则h=O(log n),如果二叉查找树严重不平衡,那么树的高度h远大于O(log n),则二叉查找树的查找、插入、删除操作的时间复杂度就比较高。

平衡查找树就是为解决二叉查找树高度h比较大时,查找、插入、删除操作的时间复杂度比较高的问题而提出的数据结构。

目前为止,我接触到的平衡查找树有:AVL树、B树、红黑树。(其他平衡查找树还有很多)

1)AVL树:最先发明的自平衡二叉查找树,AVL中任何结点的两个儿子子树的高度最大差为1.

2)B树:是一种平衡的多叉树。

3)红黑树:是一种对称的二叉B树。

2.什么是红黑树?

简单来说,红黑树是一种高度为O(log n)的二叉查找树。

红黑树中每个节点包括5个域:key(结点值)、color(结点颜色)、p(指向双亲)、left(指向左孩子)、right(指向右孩子)。

红黑树有5个性质:

性质1. 节点是红色或黑色。

  性质2. 根节点是黑色。

  性质3. 每个叶节点(NIL节点,空节点)是黑色的。(注:NIL结点被认为是叶子结点,一般根节点的父节点也会是NIL结点,表示与红黑树的内结点相对的外结点)

  性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

  性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

时间: 2024-10-18 19:14:33

红黑树(学习笔记)的相关文章

红黑树 学习笔记

  性质: 节点非黑即红 根和叶子节点是黑(这里说的叶子节点指填充后的树的叶子节点,NIL节点) 红节点的父节点是黑节点 任意一个节点到以他为根的叶子节点所经过的黑节点数目(不包括自身,但包括叶子节点)的个数是一样. 红黑树可以在O(lgn)时间内完成查询搜索操作,另插入操作需要最多2次旋转,删除操作需要最多3次旋转.

DataStructure——红黑树学习笔记

1.前言 本文伪码和解释参考: http://blog.csdn.net/v_JULY_v/article/details/6105630 C实现的源码本文未贴出,请见: http://blog.csdn.net/v_july_v/article/details/6114226 July的博客对红黑树的分析很精彩,请见: http://blog.csdn.net/v_JULY_v/article/category/774945 本文对参考资料有所修订和补完(侵删). 2.正文 伪码中使用的符号:

红黑树学习笔记(3)-删除操作

1.设删除的节点为$z$,另外定义节点$x,y$如下: $y=\left\{\begin{matrix}z & z的左孩子或右孩子为空节点\\ Successor(z) & otherwise\end{matrix}\right.$ $x=\left\{\begin{matrix}y.left & y的左孩子不为空\\ y.right & otherwise\end{matrix}\right.$ 其中$Successor$函数的定义在这里 接下来,用$x$替换节点$y$,

红黑树探索笔记

最近花了些时间重拾数据结构的基础知识,先尝试了红黑树,花了大半个月的时间研究其原理和实现,下面是学习到的知识和一些笔记的分享.望各位多多指教.本次代码的实现请点击:红黑树实现代码 红黑树基础知识 定义 红黑树是带有color属性的二叉搜索树,color的值为红色或黑色,因此叫做红黑树. 对红黑树的每个结点的结构体定义如下: struct RBNode { int color; void *key; void *value; struct RBNode *left; struct RBNode *

算法导论 红黑树 学习 旋转(二)

学习算法 还是建议看看算法导论 算法导论第三版 如果不看数学推导 仅看伪代码 难度还是适中 本系列只是记录我的学习心得 和伪代码转化代码的过程 深入学习 还是建议大家看看算法书籍 教程更加系统. 本文参考算法导论第13章节 红黑树 代码由本人写成 转载请标明出处 红黑树是一个带颜色的二叉树 有以下5点性能 1 每个节点或者红色或者黑色 2 根节点黑色 3 每个叶子节点(nil)为黑色 4 如果一个节点是红色的则它的两个子节点都是黑色 5 每个节点 该节点到子孙节点的路径上 黑色节点数目相同 如图

算法导论 红黑树 学习 删除(四)

版权声明:本文为博主原创文章,未经博主允许不得转载.技术博客 http://blog.csdn.net/stecdeng 技术交流群 群号码:324164944 欢迎c c++ windows驱动爱好者 服务器程序员沟通交流 学习算法 还是建议看看算法导论 算法导论第三版 如果不看数学推导 仅看伪代码 难度还是适中 本系列只是记录我的学习心得 和伪代码转化代码的过程 深入学习 还是建议大家看看算法书籍 教程更加系统. 本文参考算法导论第13章节 红黑树 代码由本人写成 转载请标明出处 先看看不做

红黑树学习

红黑树是工程中用的比较多的一个数据结构,它的优点是查找的复杂度是O(lgN), 而且红黑树会在插入 数据的时候保持平衡,抑制复杂度的暴涨.虽然它没有hashtable那样高效,但是不用事先规划并分配空间.那么它是怎么做到的呢? 下面是它的特性: 1.红黑树由红色和黑色的元素构成(着色) 2.红色节点没有红色的子节点(红色与红色是宿敌) 3.所有从根节点到叶子节点的黑色节点数量相等(左右平衡). 可以推出: 1根节点是黑色的. 2.红色节点的两个子节点都是黑色的 插入操作 数据是怎么插入呢?这里忘

红黑树学习资料总结

关于红黑树的插入:红黑树并没有我们想象的那么难(上) 关于红黑树的删除:红黑树插入删除 关于红黑树的源码剖析:红黑树C源码实现与剖析

数据结构 - 红黑树学习

红黑树 红黑树算是用的比较多,但是平时自己很少写的一种数据结构了,先看下介绍: 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 看~ 典型是用来实现关联数组,能想到什么数据结构呢?list map set这些容器的底层都是红黑树来实现的. 红黑树和AVL树(平衡二叉查找树) 红黑树并不是完全平衡的一棵树,所以红黑树是在平均时间(经验)上为O(log n)的复杂度,包括插入,删除和查找. 红黑树规则 所有节点都分为红色

树/二叉树(哈夫曼树/红黑树)笔记

1.树是一种常用数据结构,它是非线性结构. 2.树中任一普通节点可以有0或者多个子节点,但只能有一个父节点. 根节点没有父节点, 叶子节点没有子节点. 3.二叉树: 1)每个节点最多只能有两个子树的有序树 2)左边的子树称为左子树 3)右边的子树成为右子树 4)一棵深度为k的二叉树,如果它包含了(2^k-1)个节点,就把这棵二叉树称为满二叉树 4.满二叉树的特点: 1)每一层上的节点数都是最大节点数,即各层为1,2,4,8,16 .... (2^k-1) 2)一棵有n个节点的二叉树,按满二叉树的