红黑树及插入过程详解

news2024/11/29 1:31:44

推荐可视化插入、删除节点的二叉树网站:Red/Black Tree Visualization (usfca.edu)

1. 概述

        红黑树(Red-Black Tree)是一种自平衡的二叉搜索树(Binary Search Tree)。它在普通二叉搜索树的基础上通过引入额外的颜色属性和一些特定的规则来保持树的平衡,以提供更高效的插入、删除和查找操作。红黑树的时间复杂度也是 O(log N)

2. 特点

  1. 二叉搜索树特性:红黑树是一棵二叉搜索树,即左子树中的所有节点的值小于当前节点的值,右子树中的所有节点的值大于当前节点的值。

  2. 节点颜色:每个节点被标记为红色或黑色。

  3. 根节点和叶子节点:根节点和叶子节点(NIL节点或空节点)都是黑色的。

  4. 红色节点规则:不能有两个相邻的红色节点,即红色节点的父节点和子节点都不能是红色节点。

  5. 黑色节点规则:从根节点到叶子节点的任意路径上的黑色节点数量是相同的(黑色节点高度相等)。

  6. 最长路径和最短路径:红黑树的最长路径不超过最短路径的两倍,保证了树的平衡性。比如:黑黑黑黑黑(5个) 和 黑  黑  黑  黑(10个)

3. 红黑树与AVL的区别

        红黑树(Red-Black Tree)和AVL树都是自平衡的二叉搜索树,它们在保持树的平衡性和提供高效的插入、删除和查找操作方面有相似的目标。然而,它们在实现上有一些区别:

  1. 平衡性要求:AVL树要求左右子树的高度差不超过1,而红黑树没有明确的高度差限制,它只要求满足红黑树的五个性质即可。

  2. 平衡调整操作:AVL树在插入或删除节点后,可能需要进行更多的旋转操作来保持平衡,以满足高度差限制。而红黑树的平衡调整操作相对较少,通常只需要进行颜色变换和旋转。

  3. 维护开销:由于AVL树要求更严格的平衡,它的平衡调整操作相对较多,因此在频繁的插入和删除操作时,AVL树可能需要更多的平衡调整,导致维护开销较大。而红黑树的平衡调整操作相对较少,所以在插入和删除操作频繁的情况下,红黑树通常具有更好的性能。

  4. 内存占用:AVL树通常需要额外的平衡因子来记录每个节点的高度差,因此占用的内存空间相对较大。而红黑树只需要一个额外的颜色属性来记录节点的颜色,因此在内存占用上相对更优。

        综上所述,AVL树在保持严格的平衡性方面更强,适用于对平衡性要求较高的场景,但在频繁的插入和删除操作下会有较大的维护开销。而红黑树则在平衡性要求相对较宽松的情况下提供较好的性能和较低的维护开销,适用于广泛的应用场景。

4. 红黑树的插入过程

 (1)插入 1,2

 (2)插入 3,父节点是红,叔节点是黑,类型是右右(RR),需要左旋+变色

(3) 插入 4,父节点是红,叔节点也是红

父节点和叔节点都变黑,祖父变红,祖父变成当前节点,也就是2节点变为当前节点,递归这个规则:(2节点为根节点,变黑)

(4) 插入 10,12

 (5)插入 11,父节点是红,叔节点是黑,类型是右左(RL),需要先右旋,再左旋+变色

右旋

 左旋

变色

5. 面试问题

 Java8中,HashMap实现,每一个桶是一个链表,当链表长度大于阈值(默认为 8),会将链表转换成红黑树,为什么选择转换为红黑树,而不是BST和AVL?

答:

不用BST:递增或递减序列可能会退化成链表

不同AVL:AVL的平衡条件更为严格,需要更频繁的进行旋转操作,会导致性能下降。

        另外,红黑树相对于AVL树在插入和删除操作时的平衡调整次数较少,这也意味着在频繁进行插入和删除操作时,红黑树的性能可能会更好。

        因此,在HashMap中选择使用红黑树作为链表长度超过阈值时的数据结构转换,是为了在平衡性和性能之间取得一个较好的平衡。这样可以在大多数情况下保持良好的性能,并避免由于频繁的旋转操作而引起的性能下降。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/590130.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DragGAN图像生成原理与实现

DragGAN图像生成原理与实现 DragGAN模型是什么呢1. DragGAN背景介绍2. 模型方法2.1 算法原理2.1.1 Motion Supervision2.1.2 点跟踪 3. 实现部署步骤3.1 安装PyTorch3.2 安装 DragGAN3.3 运行 DragGAN Demo3.4 功能介绍 项目地址:https://github.com/Zeqiang-Lai/Dr…

衡量有效的质量保证过程的10个基本指标

作者 | Tania Zhydkova 在开发的世界中,有一个永恒的规则,那就是你无法改进无法衡量的东西。当然,这条规则也适用于质量保证。 所生产软件的阵列呈指数级增长,这意味着保证质量所需的测试覆盖率也在以同样的程度增长。这也导致了…

浅谈Web渗透测试

目录 背景介绍 漏洞挖掘 渗透测试 个人看法 Web 渗透测试方法构想 PTES 简介 Web “PTES” 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 测试报告 Web渗透测试实例 前期交互 信息收集 漏洞建模 漏洞分析 渗透利用 报告 本文包括 背景介绍,We…

上传作品并投票的小程序微信中的微信投票微信小程序

现在来说,公司、企业、学校更多的想借助短视频推广自己。 通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情,又可以让商家和企业实现推广的目的&am…

IDEA 创建 Springmvc 项目

一、概述 在18年的时候就开始接触 SpringBoot ,然后就一直在使用它。众所周知 SpringBoot 内嵌 Tomcat,后续再也没有单独新建过Web 项目。作为IDEA 的用户,总想要用它来建一个Web 项目自己跑一跑,但建项目不是我最终目的~~ &…

为什么那么多人劝退软件测试?月薪1万以上的就别点进来了

2023年已经过了快一半了,今天跟大家聊一聊软件测试薪资这个话题 和大家说一句掏心窝的话:直到现在,软件测试依旧是寒门改变命运的一个最佳选择之一,要不是怕被喷,我都想把之一去掉,因为想了半天&#xff0…

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析

【Bert、T5、GPT】fine tune transformers 文本分类/情感分析 0、前言text classificationemotions 数据集data visualization analysisdataset to dataframelabel analysistext length analysis text > tokenstokenize the whole dataset fine-tune transformersdistilbert…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例应用

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

uni-app生命周期有哪些?怎么理解?

uni-app生命周期有哪些?怎么理解? uni-app生命周期有哪些?怎么理解? 文章目录 uni-app生命周期有哪些?怎么理解?前言一、什么是生命周期函数?二、uni-app生命周期分类总结 前言 UNI-APP学习系…

Spring概述、Spring的优势和体系结构

Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核。提供了展现层 Sprin…

【重磅】“饶派杯”XCTF车联网安全挑战赛明日开赛!

2023年5月31日,由江西省委网信办、江西省工信厅、上饶市人民政府主办的“饶派杯”XCTF车联网安全挑战赛即将重磅开赛。来自国内外知名高校、自动驾驶汽车企业和科研院所的21支CTF精英战队齐聚上饶,聚焦车联网安全行业的典型漏洞及风险,面向车…

借助chatgpt做一个pdf转word的小工具

因 中午我在一篇公众号文章中发现了一个名为 pdf2docx 的 Python 包,可以将 PDF 文件转换成 Word 文件。但是,这个包不支持将图片型 PDF 转换成 Word,而且需要自己编写代码来实现转换功能。 于是我想,将这个包制作成一个小工具&a…

企业仓库管理系统的设计与实现(ASP.NET,SQL)

开发环境:Microsoft Visual Studio 数据库:Microsoft SQL Server 程序语言:asp.NET(C#)语言 本系统的开发使各大公司所的项目管理更加方便快捷,同时也促使项目的管理变的更加系统化、有序化。系统界面较友好,易于操作。…

食物储藏信息管理系统的设计与实现(ASP.NET,SQLServer)

需求分析 食物储藏信息管理系统是一个典型的数据库开发应用程序,由基础信息维护、用户信息维护、食物提醒管理、用户管理、食物管理、系统管理、食物储藏等功能模块组成。 具体功能实现如下: 食物管理:食物管理部门自行添加食物,可…

华为OD机试真题B卷 Java 实现【24点游戏算法】,附详细解题思路

一、题目描述 给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,运算符仅允许出现在两个数字之间,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且需考虑括号运算 此题允许数字重复&#xff…

Ubuntu22.04部署K8S1.27.2版本集群

一、设置主机名并在 hosts 文件中添加条目 1、登录节点使用 hostnamectl 命令设置 hostname #在master中: 172.18.10.11 $ sudo hostnamectl set-hostname "k8s-master" #在work1节点中: 172.18.10.12 $ sudo hostnamectl set-host…

“百亿生态”背后,拼多多的初心

哈佛商学院教授、“颠覆性创新”理论的提出者克莱顿克里斯坦森,在《繁荣悖论》中将创新分为三类:第一类是效率创新,即生产更便宜、更优质的产品;第二类是持续性创新,即不断对产品进行改进;第三类是市场创造…

cuda编程学习——卷积计算CUDA、Pytorch比较 干货向(六)

前言 参考资料: 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程:基础与实践 樊哲勇 参考B站:蒙特卡洛加的树 文章所有代码可在我的GitHub获得,后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》&#…

勿踩,电商实时聊天常见错误

实时聊天现在在电商企业与SaaS行业已经是必备的服务,他的实施很简单:您找到适合您的工具,将其打开并将其放在所有客户都可以看到的地方。但是无休止的互动冲击,措辞不佳或沟通不畅的问题,客户的24/7期望,在…