树 —— 红黑树

本文详细介绍了红黑树这一数据结构,包括其基本特性、二叉查找树回顾、红黑树的插入和删除修复过程,对比了红黑树与AVL树的性能特点。红黑树通过特定的着色规则和旋转操作保持近乎平衡,确保操作的时间复杂度为O(logn)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、红黑树的介绍

  1. 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。

  2. 在二叉查找树的基础上增加了着色和相关的性质使得红黑树相对平衡,从而保证了红黑树的查找、插入、删除的时间复杂度最坏为O(logn)。

在这里插入图片描述


二、二叉查找树的回顾

(1)二叉查找树的介绍

  • 二叉查找树也称有序二叉树,或已排序二叉树;

  • 树的这种数据结构,既能像链表那样快速的插入和删除,又能想有序数组那样快速查找。

(2)二叉查找树的基本特征

  • 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 没有键值相等的节点;
  • 需要保证树总是平衡的(或者至少大部分是平衡的),这就是说对树中的每个节点在它左边的后代数目和在它右边的后代数目应该大致相等

三,红黑树的基本特性

  1. 每个结点要么是红的,要么是黑的。
  2. 根结点是黑的。
  3. 每个叶结点,即空结点(NIL)是黑的。
  4. 如果一个结点是红的,那么它的俩个儿子都是黑的。
    (如果一个结点是黑的,则它的俩个儿子不作要求)
  5. 从根节点到叶节点或空子节点的每条路径,必须包含相同数目的黑色节点。
    (故需要特别注意黑色节点的设置)

四,红黑树平衡性的修正

  • 部分结点颜色,重新着色

  • 调整部分指针的指向,即左旋、右旋。

1. 左旋

在这里插入图片描述

2. 右旋

ca83bf2449cdcb3f3901461e028cc924.jpeg


五、红黑树的插入和插入修复

  • 核心思路:将红色的节点移到根节点(即将出现的问题由下向上抛);然后,将根节点设为黑色

  • 插入的节点必须是红色的。将插入的节点着色为红色,不会违背"特性(5)"!少违背一条特性,就意味着我们需要处理的情况越少。

第一步:

将红黑树当作一颗二叉查找树,将节点插入。从树根开始向下查找,找到val值对应的位置,将节点插入;如果查找到与val值相同的结点,则什么也不做,直接返回

第二步:

将插入的节点着色为"红色"。

第三步:

通过一系列的旋转或着色等操作,使之重新成为一颗红黑树。即插入修复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值