浅谈红黑树

红黑树是什么?

其实也是平衡二叉树,只是给每个节点标了红黑颜色

为什么需要红黑树?

红黑树其实基础还是二叉查找树,只是因为二叉查找树很容易出现不平衡的情况,最坏情况相当于O(n),红黑树和AVL树应运而生,AVL树的话,因为平衡度要求是[-1,1]太严格,所以插入和删除的时候的效率并不是很高,比不上红黑树,但是因为平衡度是[-1,1],所以查找速度比红黑树快,AVL适用于频繁查找,红黑树适用于频繁插入和删除

红黑树五大特性

1,每个节点不是黑色就是红色

2,根节点肯定是黑色

3,叶子节点肯定是黑色

4,红色节点的叶子节点肯定是黑色(也就是没有两个红色节点连续)

5,从树的任意一个节点出发往叶子走的所有路径,经过的黑色节点数肯定相同

基于这些特性形成了红黑树的平衡,(任意一个节点出发到叶子节点的最长路径肯定不超过最短路径的一倍),因为最短的肯定是全黑,最长肯定是红黑交叉

查找,插入,删除大部分操作和二叉查找树相同,只是多了要修改平衡的地方,下面特别说一下插入和删除

红黑树有三大操作,基于这些操作才完成的平衡

1,换色   把红色改成黑的,黑的改成红的

2,左旋    和二叉查找一样,不做赘述

3,右旋    和二叉查找一样,不做赘述

插入三大步骤

1,像二叉查找树一样找到插入位置插入节点

2,把插入的节点标记成红色(因为插入红色才不会影响第五条特性)

3,如果破坏平衡,进行修复

插入节点的几种情况

1,空树

直接插入,但是因为插入的是红色节点,根节点要是黑色, 所以进行换色操作

2,插入节点已经存在

把新的这个节点替换掉原来的那个,颜色改成和旧的一样的

3,插入位置的父节点是黑色

没得影响,不做处理

4,父亲节点是红色,叔叔节点是红色

直接把爷爷节点改成红色,父亲数数都改成是黑色

5,父亲节点是红色,叔叔节点是黑色

  5.1 插入节点 N 是父节点 P 的左节点且父节点 P 是祖父节点 PP 的左节点:

    把父节点和祖父节点换色,然后右旋

  5.2 插入节点是父节点的右节点且父节点 P 是祖父节点 PP 的左节点:

    把父节点和祖父节点换色,然后左旋

删除步骤

1,像二叉查找树一样找到删除节点

{

  1.1,叶子节点,直接删

  1.2    只有一个子树,直接接上去完事

  1.3     在右子树中找到最小值,也就是后继节点

}

2,修复平衡

修复平衡的话,我肯定是找到删除后的代替节点的位置,然后去修复,也就是找到由下而上的第一个错的位置,也就是真正删除节点的子树位置

不想画图,依旧文字表示完事儿

1,接替节点的兄弟是红色的

  兄弟父亲换色,然后左旋

2,接替节点的兄弟是黑色,且兄弟的俩个孩子也都是黑色的

  兄弟改成是红色

3,接替节点的兄弟是黑色的,并且兄弟的左孩子是红色,右孩子为黑色

  兄弟左孩子和自己换色,然后右旋

4,接替的兄弟是黑色的;并且兄弟的右孩子是红色的,左孩子任意颜色。

  兄弟改成父亲颜色,父亲换色,右儿子换色,然后左旋

核心:其实这些操作都是基于想弥补平衡,因为删除的是黑色,所以经过删除位置的路径都会少一个黑色,这个时候就由两个选择去操作1,自己这边改出一个黑色(自己+1)2,兄弟这边弄个红色(兄弟-1),基本思想是这个,然后由下而上的把问题节点推上去,直到完成

参考博文

https://www.cnblogs.com/alantu2018/p/8462017.html

https://www.jianshu.com/p/0eaea4cc5619

https://segmentfault.com/a/1190000021366480?utm_source=tag-newest

原文地址:https://www.cnblogs.com/Lis-/p/12267445.html

时间: 2024-08-30 12:05:37

浅谈红黑树的相关文章

浅谈红黑树(C语言代码实现)

定义: 我们先来看看<算法导论>中的红黑树的定义:"红黑树是许多'平衡'搜索树的一种,可以保证在最坏的情况下基本动态集合操作的时间复杂度为O(lgn)." 性质: 红黑树的性质如下: 1.每个节点是红色的,或者是黑色的. 2.根节点和叶子节点是黑色的. 3.如果一个节点是红色的,那么它的父节点和子节点必须是黑色的. 4.对于每一个节点来说,从该节点到叶子节点的简单路径上,所包含的黑色节点的数量必须一致. 节点属性: 红黑树每个节点的基本属性值有五个: 1.color:表示该

浅谈红黑树的添加删除操作

红黑树的性质(牢记) 1.每个结点的颜色只能是红色或黑色. 2.根结点必须是黑色的. 3.每个叶子结点都带有两个空的黑色结点(被称为黑哨兵null),如果一个结点n的只有一个左孩子,那么n的右孩子是一个黑哨兵:如果结点n只有一个右孩子,那么n的左孩子是一个黑哨兵. 4.如果一个结点是红的,则它的两个儿子都是黑的.也就是说在一条路径上不能出现相邻的两个红色结点. 5.从任何一个结点到其子孙叶结点的所有路径上包含相同数目的黑结点. 一.红黑树的插入 任何一个即将插入的新结点的初始颜色都为红色.这一点

浅谈红黑树——java面试拦路虎

红黑树相信经过面试官折磨的人都不会太陌生,作为数据结构中较复杂都一种,一直是面试中面试官常用的虐杀手段.废话不多说,直接进入正题. 在了解红黑树之前,先要了解二叉查找数,又叫二叉树.二叉树顾名思义,是一种每个节点最多有两个子节点都树,同时遵循 左节点的值<父节点的值<右节点的值 这样的规律,如下图所示. 它是一种查找次数小于等于树高的数据结构.如图中树有4层,即树高为4,当我们需要查找8时,经过的路线是这样的: 1.8<9,往左查找 2.8>5,往右查找 3.8>7,往右查找

为什么要有红黑树?什么是红黑树?画了20张图,看完这篇你就明白了

为什么要有红黑树 想必大家对二叉树搜索树都不陌生,首先看一下二叉搜索树的定义: 二叉搜索树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 从理论上来说,二叉搜索树的查询.插入和删除一个节点的时间复杂度均为O(log(n)),已经完全可以满足我们的要求了,那么为什么还要有红黑树呢? 我们来看一个例

Java高级工程师面试题总结及参考答案

一.面试题基础总结 1. JVM结构原理.GC工作机制详解 答:具体参照:JVM结构.GC工作机制详解     ,说到GC,记住两点:1.GC是负责回收所有无任何引用对象的内存空间. 注意:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,2.GC回收机制的两种算法,a.引用计数法  b.可达性分析算法(  这里的可达性,大家可以看基础2 Java对象的什么周期),至于更详细的GC算法介绍,大家可以参考:Java GC机制算法 2.Java对象的生命周期 答:创建阶段 . 应用阶段

java高级工程师(二)

一.Java底层基础题 1.SpringMVC的原理以及返回数据如何渲染到jsp/html上? 答:Spring MVC的核心就是 DispatcherServlet , 一个请求经过 DispatcherServlet ,转发给HandlerMapping ,然后经反射,对应 Controller及其里面方法的@RequestMapping地址,最后经ModelAndView和ViewResoler返回给对应视图  .  具体可参考:Spring MVC的工作原理 2.一个类对象属性发生改变时

面试总结——Java高级工程师(二)

一.Java底层基础题 1.SpringMVC的原理以及返回数据如何渲染到jsp/html上? 答:Spring MVC的核心就是 DispatcherServlet , 一个请求经过 DispatcherServlet ,转发给HandlerMapping ,然后经反射,对应 Controller及其里面方法的@RequestMapping地址,最后经ModelAndView和ViewResoler返回给对应视图  .  具体可参考:Spring MVC的工作原理 2.一个类对象属性发生改变时

浅谈算法和数据结构: 九 平衡查找树之红黑树

原文:浅谈算法和数据结构: 九 平衡查找树之红黑树 前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度.但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 定义 红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,

浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树

http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(B