AVL树与红黑树(RBTree)的概念与区别

article/2025/5/15 10:01:09

要想了解AVL树与红黑树的区别,首先我们要先知道,这两棵树是属于自平衡二叉树,那么什么是平衡二叉树呢?

一、平衡二叉树

二叉树的每一个节点的左右子树的深度差不超过1。

二、如何实现自平衡?

通过旋转,旋转分为四种类型
1、LL型(右旋):在左子树的左孩子上添加新的节点在这里插入图片描述
在这里插入图片描述

2、RR型(左旋):在右子树的右孩子上添加新的节点
在这里插入图片描述
在这里插入图片描述

3、LR型(先左旋(失衡子树)再右旋):在左子树的右孩子上添加新节点
在这里插入图片描述

4、RL型(先右旋(失衡子树)再左旋):在右子树的左孩子上添加新节点
在这里插入图片描述

三、AVL树

AVL树是带有平衡条件的二叉查找树,左右子树树高不超过1,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。因此它也被称为高度平衡树。
在这里插入图片描述

四、红黑树

一种特化的AVL树(平衡二叉树),都是在进行插入和删除操作时通过特定操作保持二叉查找树的平衡,从而获得较高的查找性能。
下图就是一颗简单的红黑树。其中Nil为叶子结点,并且它是黑色的。
在这里插入图片描述

满足下列5个特性:

1、每个结点是红色或者黑色的。
2、根结点是黑色的。
3、每个空结点(NULL/NIL)是黑色的。(这里将空结点作为一个特殊的结点对待,设定他们必须是黑色的。)
4、如果一个结点是红色的,则它的左右子结点都必须是黑色的。(但黑色结点的子结点可以是黑色的。)
5、对任意一个结点来说,从它到空结点的所有路径必须包含相同数目的黑色结点。

五、区别

和红黑树相比,AVL树是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1)。通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保没有一条路径会比其它路径长出两倍,因此,红黑树是一种弱平衡二叉树(由于是弱平衡,可以看到,在相同的节点情况下,AVL树的高度低于红黑树)。

六、应用

1,广泛用于C ++的STL中,地图和集都是用红黑树实现的;

2,着名的Linux的的进程调度完全公平调度程序,用红黑树管理进程控制块,进程的虚拟内存区域都存储在一颗红黑树上,每个虚拟地址区域都对应红黑树的一个节点,左指针指向相邻的地址虚拟存储区域,右指针指向相邻的高地址虚拟地址空间;

3,IO多路复用的epoll的的的实现采用红黑树组织管理的的的sockfd,以支持快速的增删改查;

4,Nginx的的的中用红黑树管理定时器,因为红黑树是有序的,可以很快的得到距离当前最小的定时器;

5,Java中TreeMap中的中的实现;


http://chatgpt.dhexx.cn/article/kSI2FTSt.shtml

相关文章

HashMap 链表与红黑树转换

链表转换为红黑树 //此处遍历链表for (int binCount 0; ; binCount) {//遍历到链表最后一个节点if ((e p.next) null) {p.next newNode(hash, key, value, null);//如果链表元素个数大于等于TREEIFY_THRESHOLDif (binCount > TREEIFY_THRESHOLD - 1) // -1 for 1st//红黑…

为什么要有红黑树?什么是红黑树?

为什么要有红黑树 想必大家对二叉树搜索树都不陌生,首先看一下二叉搜索树的定义:二叉搜索树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则…

HashMap与红黑树

一、为什么需要HashMap? 在我们写程序的时候经常会遇到数据检索等操作,对于几百个数据的小程序而言,数据的存储方式或是检索策略没有太大影响,但对于大数据,效率就会差很远。 1、线性检索: 线性检索是最为直白的方法…

数据结构:什么是红黑树?为什么要用红黑树?

本篇主要谈谈对红黑树的理解,大家都晓得JDK8中的hashmap底层是数组链表红黑树实现的,当面试官问你:为啥要加上红黑树实现呢?? 那我们首先从概念来了解一下: 一、什么是红黑树? 红黑树是一个接…

随处可见的红黑树详解

随处可见的红黑树详解 前言为什么要有红黑树二叉搜索树平衡二叉搜索树红黑树 红黑树的应用场景红黑树的性质(重点)红黑树的定义红黑树的左旋与右旋红黑树插入结点与插入维护红黑树的三种情况插入结点插入结点后维护红黑树父结点是爷结点是左子树1. 叔结点…

HashMap-链表与红黑树转换触发条件

JDK1.8对HashMap进行了很多优化。 例如当一个槽位slot上的链表个数过多时,则会将链表转换为红黑树,以提高查询检索的效率。 访问节点方式:先找到节点所在的数组index索引位置,然后判断节点是什么结构进行遍历。 节点结构是非树…

9.HashMap里的红黑树是什么

1. 简介 红黑树是一种自平衡二叉查找树。它的统计性能要好于平衡二叉树(AVL树),因此,红黑树在很多地方都有应用。在C STL中,很多部分(目前包括set, multiset, map,multimap)应用了红黑树的变体(SGI STL中的红黑树有一…

算法:什么是红黑树

红黑树的定义 红黑树的英文是“Red-Black Tree”,简称 R-B Tree。它是一种不严格的平衡二叉查找树。顾名思义,红黑树中的节点,一类被标记为黑色,一类被标记为红色。除此之外,一棵红黑树还需要满足这样几个要求&#x…

pygraphviz的安装与红黑树可视化

大家好,我是小小明,今天我将带大家安装pygraphviz,并通过它对红黑树这种数据结构进行可视化。 pygraphviz的安装与红黑树的可视化 安装graphviz 下载地址:http://www.graphviz.org/download/ windows平台下可以选择&#xff1…

到底什么是红黑树?

到底什么是红黑树? 首先,可以这么简单粗暴的理解,红黑树≈平衡的二叉排序树。 那么很显然,要想弄懂红黑树,得先明白什么是树、二叉树、二叉排序树、平衡树以及不平衡树。下面我们一个个来了解。 1.第一个问题&#x…

面试常问:什么是红黑树?

什么是红黑树? ———————————— 二叉查找树(BST)具备什么特性呢? 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 下图…

红黑树简介

一、什么是红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。 红黑树是在1972年由Rudolf Bayer发明的,当时被称为平衡二叉B树(symme…

什么是红黑树?

一、红黑树的产生 1.二叉树 定义:二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的&…

说说什么是红黑树?

分析&回答 红黑树介绍 R-B Tree,全称是Red-Black Tree,又称为“红黑树”,红黑树就是一种平衡的二叉查找树,说他平衡的意思是他不会变成“瘸子”,左腿特别长或者右腿特别长。除了符合二叉查找树的特性之外&#xf…

漫画:什么是红黑树?(整合版)

前段时间,小灰发布了红黑树相关的文章,分成上下篇来讲解。 这一次,小灰把两篇文章做了整合,并且修正了红黑树删除部分的图片错误,感谢大家的指正。 ————— 第二天 ————— ———————————— 二叉查找…

抗性基因数据库CARD介绍

随着抗生素药物的发现及使用,越来越多的耐药菌株由此产生。而耐药菌株的发展则会增加疾病治疗的难度和成本,因此耐药微生物的研究则显得尤为重要。目前,通过对耐药基因的鉴定挖掘能够一定程度上帮助我们揭开耐药机制,为疾病的治疗…

关于 GIL

目录 GIL是什么GIL产生的原因如何避免受到GIL的影响什么时候会释放GIL锁互斥锁和Gil锁的关系 参考链接 python中的GIL详解 python面试不得不知道的点——GIL 《Python面试每日一题》之GIL Python GIL 是功能和性能之间权衡后的产物,它尤其存在的合理性&#xff0…

gin介绍

Gin的介绍与应用 Gin是一个golang的web框架,Gin像是一些常用函数或者工具的集合。具有快速灵活,容错方便等特点。Gin自身的net/http足够简单,性能也非常不错。 Gin的官网:https://github.com/gin-gonic/gin 安装前保证git和go都安…

gin_gorm

一、使用形式 1、引入gorm包 import "github.com/jinzhu/gorm" 2、导入数据库驱动 import _ "github.com/go-sql-driver/mysql"为了方便记住导入路径,GORM包装了一些驱动: import _ "github.com/jinzhu/gorm/dialects/mysq…