红黑树的添加与删除

主脉络参考http://www.cnblogs.com/skywang12345/p/3245399.html#!comments

补图删除操作:https://blog.csdn.net/eson_15/article/details/51144079

R-B Tree的在线生成:http://sandbox.runjs.cn/show/2nngvn8w

数据结构与算法汇总:http://www.cnblogs.com/skywang12345/p/3603935.html

红黑树 R-B Tree

1、红黑树的时间复杂度与特性
  1.1 特性:
    (1):每个节点不是黑色就是红色;
    (2):根节点是黑色
    (3):叶子结点(为空的叶子节点)是黑色
    (4):若一个节点是红色,则其子节点必为黑色,反之不成立
    (5):从一个节点到该节点的子孙节点的所有路径上有相同数目的黑节点。
1.2 时间复杂度:
  (1):红黑树的时间复杂度是O(logn)。
  (2):一颗含有n个节点的红黑树的高度至多为2*log(n+1);

2、左旋与右旋(旋转前后仍然是二叉查找树)
  2.1:对x节点左旋:被旋转的节点成为一个左节点;
  2.2:对x节点右旋:被旋转节点成为一个右节点; 

                               z
   x                          /
  / \      --(左旋)-->  x
 y   z                      /
                           y
------------------------------------
                              y
   x                            \
  / \      --(右旋)-->       x
 y   z                                                                 z

3、红黑树基本操作--添加

  3.1:RB-Insert:
    找到该节点的插入位置y,并将其染成红色;
  3.2:RB-Insert-FixUp
    3.2.1:被插入节点是根节点:着黑;
    3.2.2:被插入节点父节点是黑色,直接插入
    3.2.3:被插入节点父节点是红色:
      case1:父节点红,叔叔节点红:
        (1):父节点、叔叔节点设为黑
        (2):祖父节点设为红
        (3):以祖父节点为当前节点,再判断;

      case2:父节点红,叔叔节点黑,插入节点是右孩子;

        (1):以父节点为当前节点
        (2):左旋,再判断;

      case3:父节点红,叔叔节点黑,插入节点是左孩子:

        (1):父节点设为黑;
        (2):祖父节点设为红;
        (3):以祖父节点为支点右旋;

4、红黑树的基本操作--删除
  4.1:RB-delete:
    (将后继节点设置为与删除节点相同的颜色,这样只处理后继节点原位置处的平衡)
    4.1.1:被删除节点没有儿子,直接删除;
    4.1.2:被删除节点只有一个儿子,直接删除,唯一子节点顶替;
    4.1.3:被删除节点有两个儿子:找右孩子的左孩子,一直找下去(二叉搜索树的删除)。
  4.2:RB-Delete-FixUP:
    4.2.1:x为黑,兄弟节点是红(父节点和兄弟的字节点是黑);
      (1)父节点设红,兄弟设黑,父节点左旋;

    4.2.4:x为黑,兄弟节点是黑:
      case1:兄弟两个子节点都是黑:
        (1):兄弟节点设红;
        (2):当前节点更新为祖父节点;

      case2:兄弟左节点是红,右节点是黑
        (1):兄弟节点设红,兄弟左子节点设黑;
        (2):以兄弟节点作右旋;

      case3:兄弟左节点任意,右节点是红:

        (1):兄弟节点设为父节点颜色;
        (2):父节点设黑,兄弟右节点设黑;
        (3):以父节点为支点左旋;

 5:Java实现:

原文地址:https://www.cnblogs.com/whtblog/p/8968798.html

时间: 2024-10-29 03:16:21

红黑树的添加与删除的相关文章

红黑树的插入与删除

红黑树(Red Black Tree) 是一种自平衡二叉查找树.红黑树和AVL树类似,都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能.红黑树可以在O(log n)时间内完成查找,插入和删除操作. 二叉搜索树可以看 二叉搜索树 AVL树可以看 AVL树的插入与删除 1. 红黑树的性质 红黑树的自平衡依赖于它的以下性质: 性质1. 结点是红色或黑色. 性质2. 根结点是黑色. 性质3. 每个结点节点(NIL结点,空结点,与其它二叉搜索树不同,红黑树将叶子结点的孩子

红黑树从头至尾插入和删除结点的全程演示图

红黑树插入和删除结点的全程演示 作者:July.saturnman.时间:二零一一年三月二十八日.出处:http://blog.csdn.net/v_JULY_v.声明:版权所有,侵权必究.----------------------------------- 引言: 目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的阐述.而本人的红黑树系列四篇文章(详见文末的参考文献),虽然从头至尾,讲的有根有据,层次清晰,然距离读者真正做到红黑树了然于胸,则还缺点什么. 而

红黑树之添加节点和创建

红黑树之插入节点 红黑树的性质 红黑树是每个节点都带有颜色属性的二叉查找树,颜色或红色或黑色.在二叉查找树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求: 节点是红色或黑色. 根节点是黑色. 每个叶节点(这里的叶节点是指NULL节点,在<算法导论>中这个节点叫哨兵节点,除了颜色属性外,其他属性值都为任意.为了和以前的叶子节点做区分,原来的叶子节点还叫叶子节点,这个节点就叫他NULL节点吧)是黑色的. 每个红色节点的两个子节点都是黑色.(从每个叶子到根的所有路径上不能有两个连续的

红黑树(三)删除

删除操作比插入复杂一些.首先我们先来了解一些红黑树的特性.这些是我随意列举的,供大家参考. 1.红色节点的父亲黑孩子一定是黑色.(nil是黑节点) 2.单支节点,只能是黑红.(红黑,黑黑,不符合规则4,到树尾黑节点个数相同) 3.真正的删除节点一定是单支节点或者叶子节点.(没有孩子的节点) 接下来我们讲如何找真正的删除节点. 有左右子树的情况 如果8是删除节点,那么10就是真正的删除节点. 查找方法是,找8节点的右子树中的最小的节点,根据二叉树的性质,我们可以知道,8节点的右孩子的左孩子的左孩子

红黑树的插入和删除

一.红黑树的简介 红黑树是一种平衡的二叉查找树,是一种计算机科学中常用的数据结构,最典型的应用是实现数据的关联,例如map等数据结构的实现. 红黑树有以下限制: 1. 节点必须是红色或者是黑色 2. 根节点是黑色的 3. 所有的叶子节点是黑色的. 4. 每个红色节点的两个子节点是黑色的,也就是不能存在父子两个节点全是红色 5. 从任意每个节点到其每个叶子节点的所有简单路径上黑色节点的数量是相同的. 要说明一下限制3.一般在红黑树中,每个节点空指针处还会加空的黑色的孩子(称为岗哨).所以限制3一定

数据结构之红黑树(三)——删除操作

删除一个节点相同有可能改变树的平衡性,并且,删除所造成的不平衡性比插入所造成的平衡性的修正更加复杂. 化繁为简是算法分析中一个经常使用的方法.以下我们将欲删除节点分为三大类:欲删除节点为叶子节点.欲删除节点仅仅有一个子节点和欲删除有两个子节点. 而欲删除节点有两种可能的颜色,也须要分别对待. 为简化讨论,我们以欲删除节点在左側的情况为例进行修正,假设欲删除节点在右側,进行镜像地修正操作就可以. 1. 欲删除节点是叶子节点 1.1 欲删除节点为红色,父节点必为黑色.必无兄弟节点. 仅仅有下图所看到

红黑树(一)之 原理和算法详细介绍---转帖

目录1 红黑树的介绍2 红黑树的应用3 红黑树的时间复杂度和相关证明4 红黑树的基本操作(一) 左旋和右旋5 红黑树的基本操作(二) 添加6 红黑树的基本操作(三) 删除 作者:Sky Wang    于 2013-08-08 概述:R-B Tree,又称为"红黑树".本文参考了<算法导论>中红黑树相关知识,加之自己的理解,然后以图文的形式对红黑树进行说明.本文的主要内容包括:红黑树的特性,红黑树的时间复杂度和它的证明,红黑树的左旋.右旋.插入.删除等操作. 请尊重版权,转

红黑树(一)之原理和算法的详细分析【转】

本文转载自:http://www.cnblogs.com/skywang12345/p/3245399.html R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black). 红黑树的特性:(1)每个节点或者是黑色,或者是红色.(2)根节点是黑色.(3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果

数据结构--树--红黑树

R-B Tree简介 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树.红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black). 红黑树的特性:(1)每个节点或者是黑色,或者是红色.(2)根节点是黑色.(3)每个叶子节点(NIL)是黑色. [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的.(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点.