红黑树

概述

红黑树是AVL树的一个变种.

它具有如下性质:

  1. 每个节点是红色的或者黑色的
  2. 根节点是黑色的
  3. 如果一个节点是红色的,则其子节点必须是黑色的(即不存在父子节点同为红色)
  4. 从任一节点到其各个叶子节点的所有路径都包含相同数目的黑色节点
  5. 每个NIL节点(或称为空节点)可当作黑色的
    (性质5,一些书籍没将其作为性质,其存在主要是方便分析插入和删除操作)

通过性质1,3,4可以得知:
1.任意节点最大子树高度(或树深)和最小子树高度(或树深)之比在1到2之间.
2.红黑树的高度最多是2log(N+1)

因此,在红黑树中查找,其查找算法的时间复杂度为O(logN).

红黑树相比于AVL树的优点是,由于其对树高度要求的放宽,使其更容易的插入和删除,从而提高插入和删除的性能.

根据性质,有如下推论:
推论1: 红色节点必有父节点
推论2: 如果一个节点有黑色子节点,则必为双子树节点

红黑树的插入

默认插入节点的颜色是红色 1.空树插入.
插入节点由红色改为黑色,此节点即为根节点,满足性质2:
2.插入节点的父节点颜色是黑色.
直接插入节点,不会违反任何性质.
3.插入节点(x)的父节点(xp)颜色是红色.
由性质2,3可知,父节点(xp)一定还有父节点(xpp), 即插入节点(x)有祖父节点(xpp),且祖父节点(xpp)是黑色
I.父节点(xp)的兄弟节点是红色.
  xp的兄弟节点xppr是红色
  转换后
 祖父节点(xpp)作为插入节点(x)的递归向上节点.如果祖父节点(xpp)是根节点,则直接变为黑色节点.
 
II.父节点(xp)的兄弟节点是黑色(没有用兄弟节点时,按性质5,将空节点视为黑色节点).
  xp的兄弟节点xppr是黑色
  右旋
 父节点(xp)与祖父节点(xpp)颜色交换,然后右旋
 如果插入节点(x)是父节点(xp)的左子节点,需在插入节点(x)和其父节点(xp)之间做一次左旋.

红黑树的删除

删除情况分为: 1.删除节点有双子树
将其与其右子树的最小节点进行位置和颜色交换. 删除则变为了2或3
2.删除节点有单子树
由性质3,4可知,删除节点是黑色,其子节点是红色.直接由其子节点替换它,并将子节点设为黑色.
3.删除节点没有子树
如果删除节点是红色,直接删除,不违反任何规则
如果删除节点(d)是黑色(由性质4,此节点必有兄弟节点(b)):
I.兄弟节点(b)为黑色,且b的右子节点(br)为红色
  b的右子节点为红色
  新平衡
兄弟节点(b)与父节点(p)交换颜色,然后左旋,并将兄弟节点(b)的右子节点(br)设为黑色
II.兄弟节点(b)为黑色,且b的右子节点为黑色,左子节点为红色
  b的右子节点为黑色,左子节点为红色
  转换后
 B和Bl交换颜色,并以B做右旋,此时变为了I所述
 
III.兄弟节点(b)为黑色,且b的右子节点为黑色,左子节点也为黑色
a.删除节点(d)的父节点(p)为红色
  父节点(p)为红色
  新平衡
 父节点(p)与兄弟节点(b)交换颜色
b.删除节点(d)的父节点(p)为黑色
  父节点(p)为黑色
  父节点(p)左右子树都减少一
 父节点(p)左右子树都减少一,p做为D的递归向上传导节点.如果p为根节点,则整棵树所有路径上黑节点数减一
IV.兄弟节点(b)为红色
兄弟节点(b)为红色
转换后
兄弟节点(b)与父节点(p)交换颜色,然后左旋.问题变换为:删除节点(d)的兄弟节点(b)为黑色,且父节点(p)为红色的问题,见前面I,II,III
【完整课程列表】 完整图文版教程 优质的Python基础入门教程 02、程序的灵魂-算法 (共11页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python布尔类型复习4 (共9页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法1 (共32页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法2 (共17页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法3 (共22页).pptx 完整图文版教程 优质的Python基础入门教程 04、Python控制语句-条件语句 (共39页).pptx 完整图文版教程 优质的Python基础入门教程 05、Python控制语句-循环语句1 (共27页).pptx 完整图文版教程 优质的Python基础入门教程 05、Python控制语句-循环语句2 (共21页).pptx 完整图文版教程 优质的Python基础入门教程 06、Python内置数据结构1 (共29页).pptx 完整图文版教程 优质的Python基础入门教程 06、Python内置数据结构2 (共50页).pptx 完整图文版教程 优质的Python基础入门教程 07、Python文件操作 (共19页).pptx 完整图文版教程 优质的Python基础入门教程 08、Python内置数据结构练习 (共18页).pptx 完整图文版教程 优质的Python基础入门教程 09、Python函数 (共96页).pptx 完整图文版教程 优质的Python基础入门教程 10、Python函数练习 (共64页).pptx 完整图文版教程 优质的Python基础入门教程 11、Python函数总结 (共36页).pptx 完整图文版教程 优质的Python基础入门教程 12、Python模块 (共55页).pptx 完整图文版教程 优质的Python基础入门教程 14、Python面向对象编程 (共64页).pptx 完整图文版教程 优质的Python基础入门教程 15、Python异常处理 (共30页).pptx
【完整课程列表】 完整图文版教程 优质的Python基础入门教程 02、程序的灵魂-算法 (共11页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python布尔类型复习4 (共9页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法1 (共32页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法2 (共17页).pptx 完整图文版教程 优质的Python基础入门教程 03、Python基本语法3 (共22页).pptx 完整图文版教程 优质的Python基础入门教程 04、Python控制语句-条件语句 (共39页).pptx 完整图文版教程 优质的Python基础入门教程 05、Python控制语句-循环语句1 (共27页).pptx 完整图文版教程 优质的Python基础入门教程 05、Python控制语句-循环语句2 (共21页).pptx 完整图文版教程 优质的Python基础入门教程 06、Python内置数据结构1 (共29页).pptx 完整图文版教程 优质的Python基础入门教程 06、Python内置数据结构2 (共50页).pptx 完整图文版教程 优质的Python基础入门教程 07、Python文件操作 (共19页).pptx 完整图文版教程 优质的Python基础入门教程 08、Python内置数据结构练习 (共18页).pptx 完整图文版教程 优质的Python基础入门教程 09、Python函数 (共96页).pptx 完整图文版教程 优质的Python基础入门教程 10、Python函数练习 (共64页).pptx 完整图文版教程 优质的Python基础入门教程 11、Python函数总结 (共36页).pptx 完整图文版教程 优质的Python基础入门教程 12、Python模块 (共55页).pptx 完整图文版教程 优质的Python基础入门教程 14、Python面向对象编程 (共64页).pptx 完整图文版教程 优质的Python基础入门教程 15、Python异常处理 (共30页).pptx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值