数据结构与算法(十三)之红黑树

红黑树简介

红黑树是一种特殊的二叉搜索树
红黑树的性质:

  1. 节点是红色或黑色。
  2. 根节点是黑色。
  3. 每个叶子节点都是黑色的空节点(NIL节点)。
  4. 从每个叶子到根的所有路径上不能有两个连续的红色节点。
  5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

与平衡二叉树的区别

1、红黑树放弃了追求完全平衡,追求大致平衡,在与平衡二叉树的时间复杂度相差不大的情况下,保证每次插入最多只需要三次旋转就能达到平衡,实现起来也更为简单。

2、平衡二叉树追求绝对平衡,条件比较苛刻,实现起来比较麻烦,每次插入新节点之后需要旋转的次数不能预知。

节点的插入

节点插入旋转步骤

首先以二叉搜索树的方式进行插入,指针指向插入节点,且设置为红色。

  1. 变颜色:当前节点的父亲是红色,且他的祖父节点的另一个子节点也是红色(叔叔节点):
    1. 把父节点设为黑色。
    2. 把叔叔节点也设置成黑色。
    3. 把爷爷节点设为红色。
    4. 把指针指向爷爷节点,重新进行上述操作。
  2. 左旋:当父节点是红色,叔叔是黑色的时候,且当前节点是右子树,指针指向其父节点,然后以其父节点左旋。
  3. 右旋:当父节点是红色,叔叔是黑色的时候,且当前节点是左子树,指针指向其父节点,然后:
    1. 将父节点变成黑色
    2. 将祖父节点变成红色
    3. 以祖父节点右旋

插入例子

在这里插入图片描述

  1. 将节点6置为红色,插入二叉搜索树。
  2. 判断6的父节点7与叔叔节点13都是红色,那么执行情况1:父节点和叔叔节点变成黑色,爷爷节点变成红色,然后将指针指向爷爷节点。
    在这里插入图片描述
  3. 此时指针在12,其父节点5是红色,叔叔节点30是黑色,且是父节点的右子树,执行情况2,指针指向5,以5点为中心左旋。
    在这里插入图片描述
  4. 此时5的父节点是红色,叔叔节点是黑色且是父节点的左子树,指针指向父节点12,父节点变成黑色,爷爷节点变成红色,以爷爷节点为中心右旋。
    在这里插入图片描述
    这就是最后的红黑树。

节点的删除

将红黑树内的某一个节点删除。需要执行的操作依次是:首先,将红黑树当作一颗二叉查找树,将该节点从二叉查找树中删除;然后,通过"旋转和重新着色"等一系列来修正该树,使之重新成为一棵红黑树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值