红黑树红黑树的特点红黑树的模拟实现红黑树的底层结构insert的实现实现思路更新黑红比例的逻辑insert的完整代码insert的验证源码红黑树的特点红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的.红黑树的特点:节点颜色不是红色就是黑色根节点是黑色的每一条路径的黑色节点数目是相同的,(注意:这里的路径是从根节点到NIL(黑色)节点)每一条路径不允许出现连续的红色节点路径是从根节点到NIL节点的🗨️满足上面的条件,为啥就能保证红黑树
文章目录红黑树的概念红黑树的性质红黑树结点InsertCheckColourIsBalance完整代码红黑树的概念红黑树是一种二叉搜索树,但在每个结点上增加了一个存储位用于表示结点的颜色,这个颜色可以是红色的,也可以是黑色的,因此我们称之为红黑树红黑树通过对任何一条从根到叶子的路径上各个结点着色方式的限制,确保没有一条路径会比其他路径长出两倍,因此红黑树是近似平衡的红黑树的性质1、每个结点不是红色就是黑色。2、根结点是黑色的。3、如果一个结点是红色的,则它的两个孩子结点是黑色的。4、对于每个结点,从该结点到其所有后代叶子结点的简单路径上,均包含相同数目的黑色结点。5、每个叶子结点都是黑色的(此
1.概述1.1红黑树的引入有了二叉搜索树,为什么还需要平衡二叉树?在学习二叉搜索树、平衡二叉树时,我们不止一次提到,二叉搜索树容易退化成一条链这时,查找的时间复杂度从O(log2N)O(log_2N)O(log2N)也将退化成O(N)O(N)O(N)引入对左右子树高度差有限制的平衡二叉树,保证查找操作的最坏时间复杂度也为O(log2N)O(log_2N)O(log2N)有了平衡二叉树,为什么还需要红黑树?AVL的左右子树高度差不能超过1,每次进行插入/删除操作时,几乎都需要通过旋转操作保持平衡在频繁进行插入/删除的场景中,频繁的旋转操作使得AVL的性能大打折扣红黑树通过牺牲严格的平衡,换取
0.概述 对于普通的搜索树,如果一直插入比第一个元素小的元素,它会退化成一个无限向左下角眼神的单链表,使得时间复杂度退化为O(n)。如果我们在插入时保持树的结构是平衡的,则可以保证查找、插入和删除的时间复杂度有对数级的时间性能,下面讲到的AVL树和红黑树都是平衡搜索树,通过旋转来保持平衡1.AVL树1.1定义 Adelson-Velskii和Landis在1962年提出的一种平衡树,保证搜索树的高度是O(logn),这样就可以保证查找、插入和删除的时间为O(logn)1.2AVL树的描述 AVL树一般用链表描述,为了简化插入和删除操作,为每个节点增加一个平衡因子bf ,平衡因子bf(x)
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kafka,Spring,微服务,Netty等常用开发工具系列:罗列常用的开发工具,如IDEA,Mac,Alfred,electerm,Git,typora,apifox等数据库系列:详细总结了常用数据库mysql技术点,以及工作中遇到的mysql问题等懒人运维系列:总结好用的命令,解放双手
什么是红黑树?红黑树是一种自平衡的二叉查找树,是一种高效的查找树。它是由RudolfBayer于1972年发明,在当时被称为对称二叉B树(symmetricbinaryB-trees)。后来,在1978年被LeoJ. Guibas和RobertSedgewick修改为如今的红黑树。红黑树具有良好的效率,它可在O(logN)时间内完成查找、增加、删除等操作。因此,红黑树在业界应用很广泛,比如Java中的TreeMap,JDK1.8中的HashMap、C++STL中的map均是基于红黑树结构实现的。简单介绍一下什么是O(logN)当我们谈论算法的效率时,我们通常使用时间复杂度来描述算法的运行时间与
红黑树(RedBlackTree)红黑树(RedBlackTree)是一种自平衡二叉查找树,是一种高效的查找树,学习之前先了解一下平衡二叉树。于1972年由RudolfBayer发明的对称二叉B树演化而来,并以2-3-4树、2-3树流行。最终在1978年由LeonidasJ.Guibas和RobertSedgewick从对称二叉B树中推导出红黑树。红黑树具有良好的效率,它可在O(logN)时间内完成查找、增加、删除等操作建立在BST二叉搜索树的基础上,AVL、2-3树、红黑树都是自平衡二叉树,红黑树每个节点增加了一个存储位,用来记录节点的颜色,RED或者BLACK。但相比于AVL,高度平衡所带
🌇个人主页:平凡的小苏📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风翻盘。🛸C++专栏:C++内功修炼基地>家人们更新不易,你们的👍点赞👍和⭐关注⭐真的对我真重要,各位路过的友友麻烦多多点赞关注。欢迎你们的私信提问,感谢你们的转发!关注我,关注我,关注我,你们将会看到更多的优质内容!!一、红黑树的概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的
image.pngB树的阶数等于叶节点最大关键字数量+1(因为关键字两边都有指向子节点的指针-分叉)在m阶(m叉)B树中除根结点外,任何节点至少[m/2]个分叉,即至少[m/2]-1个关键字,[]代表向上取整。节点内的关键字采用顺序查找或二分查找。因为关键字太少会导致树变高,降低查找效率。另外就是保证同级子树的高度相同-平衡。image.pngB+树的阶数与叶节点最大关键字数量相同,有与分块查找相似的地方;分支节点中只包含它的叶子结点所有关键字中的最大值。查找失败:关键字的记录(信息)为空,指向null文章知识点与官方知识档案匹配,可进一步学习相关知识
当HashMap的key冲突过多时,会导致链表过长。而链表的查询效率很差,因此引入红黑树优化查询效率。为什么当链表长度大于8时候才会转红黑树而不是一开始直接使用红黑树:树节点占用空间是普通节点的两倍,因此在开始较短时候使用链表,占用空间少,查询性能也相差不大。但是当链表越来越长,查询效率逐渐变低,为保证查询效率才会舍弃链表转为红黑树,以空间换时间。根据统计,HashMap链表长度为8的概率仅有不到千万分之一,这时链表的查询性能很差了。在这种极端罕见的情况下才会将链表转换为红黑树。