首页 > 其他分享 >树--红黑树

树--红黑树

时间:2024-12-06 18:59:54浏览次数:8  
标签:-- 二叉 查找 键值 红黑树 节点 public

红黑树介绍

红黑树(Red Black Tree)是一种自平衡二叉查找树。它是在 1972 年由 Rudolf Bayer 发明的,当时被称为平衡二叉 B 树(symmetric binary B-trees)。后来,在 1978 年被 Leo J. Guibas 和 Robert Sedgewick 修改为如今的“红黑树”。

由于其自平衡的特性,保证了最坏情形下在 O(logn) 时间复杂度内完成查找、增加、删除等操作,性能表现稳定。

在 JDK 中,TreeMapTreeSet 以及 JDK1.8 的 HashMap 底层都用到了红黑树。

为什么需要红黑树?

红黑树的诞生就是为了解决二叉查找树的缺陷。

二叉查找树是一种基于比较的数据结构,它的每个节点都有一个键值,而且左子节点的键值小于父节点的键值,右子节点的键值大于父节点的键值。这样的结构可以方便地进行查找、插入和删除操作,因为只需要比较节点的键值就可以确定目标节点的位置。但是,二叉查找树有一个很大的问题,就是它的形状取决于节点插入的顺序。如果节点是按照升序或降序的方式插入的,那么二叉查找树就会退化成一个线性结构,也就是一个链表。这样的情况下,二叉查找树的性能就会大大降低,时间复杂度就会从 O(logn) 变为 O(n)。

红黑树的诞生就是为了解决二叉查找树的缺陷,因为二叉查找树在某些情况下会退化成一个线性结构。

红黑树特点

  1. 每个节点非红即黑。黑色决定平衡,红色不决定平衡。这对应了 2-3 树中一个节点内可以存放 1~2 个节点。
  2. 根节点总是黑色的。
  3. 每个叶子节点都是黑色的空节点(NIL 节点)。这里指的是红黑树都会有一个空的叶子节点,是红黑树自己的规则。
  4. 如果节点是红色的,则它的子节点必须是黑色的(反之不一定)。通常这条规则也叫不会有连续的红色节点。一个节点最多临时会有 3 个子节点,中间是黑色节点,左右是红色节点。
  5. 从任意节点到它的叶子节点或空子节点的每条路径,必须包含相同数目的黑色节点(即相同的黑色高度)。每一层都只是有一个节点贡献了树高决定平衡性,也就是对应红黑树中的黑色节点。

正是这些特点才保证了红黑树的平衡,让红黑树的高度不会超过 2log(n+1)。

红黑树数据结构

建立在 BST 二叉搜索树的基础上,AVL、2-3 树、红黑树都是自平衡二叉树(统称 B-树)。但相比于 AVL 树,高度平衡所带来的时间复杂度,红黑树对平衡的控制要宽松一些,红黑树只需要保证黑色节点平衡即可。

红黑树结构实现

public class Node {

    public Class<?> clazz;
    public Integer value;
    public Node parent;
    public Node left;
    public Node right;

    // AVL 树所需属性
    public int height;
    // 红黑树所需属性
    public Color color = Color.RED;

}

1.左倾染色

幻灯片1

                                                                幻灯片1

  • 染色时根据当前节点的爷爷节点,找到当前节点的叔叔节点。
  • 再把父节点染黑、叔叔节点染黑,爷爷节点染红。但爷爷节点染红是临时的,当平衡树高操作后会把根节点染黑。

2.右倾染色

幻灯片2

                                                                幻灯片2

3.左旋调衡

3.1 一次左旋

幻灯片3

                                                              幻灯片3

幻灯片4

                                                            幻灯片4

4.右旋调衡

4.1 一次右旋

幻灯片5

                                                                  幻灯片5

4.2 左旋+右旋

幻灯片6

                                                                     幻灯片6

标签:--,二叉,查找,键值,红黑树,节点,public
From: https://blog.csdn.net/2401_86844317/article/details/144293315

相关文章

  • 【TFTP文件传输,开发板与windows文件互传, SecureCRT中使用TFTP】
    目录列表一、从window下发送文件到板端挂载SD卡:启动板端服务器:windows中启动TFTP客户端单个文件发送:window中tftp命令:从当前本机,向远端192.168.1.27中发送C:\Users\Administrator\Downloads\test.wav文件使用bat脚本多文件发送:(注意检查更换目标IP地址、本地路径、......
  • ubuntu docker镜像制作swram集群部署java项目
    1,window安装docker工具,安装git工具docker下载地址:docker.com安装完成后启动docker,设置镜像源{ "builder":{  "gc":{   "defaultKeepStorage":"20GB",   "enabled":true  } }, "experimental":true, &......
  • 【AIGC进阶提示词分享】下行周期,怎么样沟通才能保住饭碗?
    引言在现代职场中,沟通能力已成为衡量职场人专业素养的重要指标。话语的成熟度不仅反映了个人的职业素养,更直接影响工作效率和人际关系的建立。本文将深入分析职场话语成熟度的构成要素,并通过具体案例说明如何提升沟通的专业性。提示词和示例在下方提示词和示例在下方......
  • 基于SpringBoot+Vue的精简博客管理系统设计与实现毕设(文档+源码)
    目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:         大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的精简博客管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb......
  • 基于SpringBoot+Vue的网上商城管理系统设计与实现毕设(文档+源码)
    目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:         大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的网上商城管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb......
  • ORB-SLAM2源码学习:MapPoint.cc:MapPoint::UpdateNormalAndDepth()计算平均观测方向以
    前言这个函数是属于地图点属性的一部分。1.函数声明voidMapPoint::UpdateNormalAndDepth(){....}2.函数定义1.获取观测到该地图点的所有关键帧的信息 map<KeyFrame*,size_t>observations;KeyFrame*pRefKF;cv::MatPos;{unique_lock<m......
  • Golang教程第16篇(语言数组)
    Go语言数组Go语言提供了数组类型的数据结构。数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。相对于去声明number0,number1,…,number99的变量,使用数组形式numbers[0],numbers[1]…,......
  • dsp&codec&baseband
    what'sdspADigitalSignalProcessor(DSP)isaspecializedmicroprocessordesignedspecificallyforprocessingdigitalsignalsinreal-time.Letmebreakthisdown:CoreFunctionsofDSPMainDSPOperations:├──DigitalFiltering├──SignalAnaly......
  • flask框架爱团购系统设计与实现毕设源码+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于团购系统的研究,现有研究主要集中在大型综合电商平台的团购功能上,如淘宝、美团等平台的团购模式。专门针对特定的爱团购系统的研究......
  • flask框架城镇智慧停车系统毕设源码+论文
    校园二手货物交易平台m1a2o本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于城镇智慧停车系统的研究,现有研究多集中于大城市的停车系统构建与优化,如城市级智慧停车管理系统主要聚......