红黑树的原理,红黑树原理讲解
发布:小编
红黑树的原理
红黑树的原理为:红黑树是一种特定类型的二叉树,它是在计算机科学中用来组织数据比如数字的块的一种结构。所有数据块都存储在节点中。这些节点中的某一个节点总是担当起始位置的功能,称之为根节点或根。
红黑树是一种自平衡二叉查找树,是计算机科学领域中的一种数据结构,典型的用途是实现关联数组,存储有序的数据。它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的。它可以在O(logn)时间内做查找,插入和删除,这里的n是树的结点个数。
红黑树原理讲解
性质1: 每个节点要么是 黑色 ,要么是 红色 。
性质2: 根节点是 黑色 。
性质3: 每个叶子节点(NIL)是黑色。
性质4: 每个 红色 节点的两个子节点一定都是 黑色 。
性质5: 任意一个节点到每个叶子节点的路径都包含 数量相同 的 黑节点 。俗称: 黑高 !
从性质5又可以推出:
性质5.1: 如果一个节点存在黑子节点,那么该结点肯定有两个子节点。
插入操作包括两部分工作:
注意: 插入结点,必须为 红色 ,理由很简单,红色在父节点(如果存在)为黑色节点时,红黑树的黑色平衡没被破坏,不需要做自平衡操作。如果插入结点是黑色,那么插入位置所在的子树黑色结点总是1,必须做自平衡。
最简单的一种情景,直接把插入结点作为根结点就行
注意: 根据红黑树性质2: 根结点是黑色。还需要把插入结点设为黑色。
处理: 更新当前结点的值,为插入结点的值
由于插入的结点是红色的,当插入结点的父结点为黑色时,并不会影响红黑树的平衡,直接插入即可,无需做自平衡。
再次回想红黑树的性质2: 根结点是黑色。如果插入结点的父结点为 红结点 ,那么该父结点不可能为根结点,所以插入结点总是存在祖父结点。这一点很重要,因为后序的旋转操作肯定需要祖父结点的参与。
依据红黑树 性质4可知,红色结点不能相连===>祖父结点肯定为黑结点
因为不可以同时存在两个相连的红结点。那么此时该插入子树的红黑层数的情况是:黑红红。显然最简单的处理方式是把其改为: 红黑红
处理:
1.将P和U结点改为黑色
2.将PP改为红色
3.将PP设置为当前结点,进行后序处理
注意: 单纯从插入前来看,叔叔结点非红即空(NIL结点),否则的话破坏了红黑树性质5,此路径比其它路径多一个黑色结点。
处理:
处理:
该情景对应情景4.2,只是方向反转,直接看图
处理:
处理:
Android面试 HashMap算法
基于hashing的原理,jdk8后采用数组+链表+红黑树的数据结构。我们通过put和get存储和获取对象。当我们给put()方法传递键和值时,先对键做一个hashCode()的计算来得到它在bucket数组中的位置来存储Entry对象。当获取对象时,通过get获取到bucket的位置,再通过键对象的equals()方法找到正确的键值对,然后在返回值对象。
当数组table的size达到阙值时即++size > load factor * capacity 时,也是在putVal函数中。
扩容需要重新分配一个新数组,新数组是老数组的2倍长,然后遍历整个老结构,把所有的元素挨个重新hash分配到新结构中去。
对key的hashCode进行hashing,与运算计算下标获取bucket位置,如果在桶的首位上就可以找到就直接返回,否则在树中找或者链表中遍历找,如果有hash冲突,则利用equals方法去遍历链表查找节点。
对key的hashCode做hash操作,与高16位做异或运算。
还有平方取中法,除留余数法,伪随机数法。
因为数组位置的确定用的是与运算,仅仅最后四位有效,设计者将key的哈希值与高16为做异或运算使得在做&运算确定数组的插入位置时,此时的低位实际是高位与低位的结合,增加了随机性,减少了哈希碰撞的次数。
会产生哈希碰撞,若key值相同则替换旧值,不然链接到链表后面,链表长度超过阙值8就转为红黑树存储。
HashCode相同,通过equals比较内容获取值对象。
超过阙值会进行扩容操作,概括的讲就是扩容后的数组大小是原数组的2倍,将原来的元素重新hashing放入到新的散列表中去。
相同点:都是存储key-value键值对的
不同点:
loadFactor表示HashMap的拥挤程度,影响hash操作到同一个数组位置的概率。默认loadFactor等于0.75,当HashMap里面容纳的元素已经达到HashMap数组长度的75%时,表示HashMap太挤了,需要扩容,在HashMap的构造器中可以定制loadFactor。
JDK 1.8 以前 HashMap 的实现是 数组+链表,即使哈希函数取得再好,也很难达到元素百分百均匀分布。当 HashMap 中有大量的元素都存放到同一个桶中时,这个桶下有一条长长的链表,这个时候 HashMap 就相当于一个单链表,假如单链表有 n 个元素,遍历的时间复杂度就是 O(n),完全失去了它的优势。针对这种情况,JDK 1.8 中引入了 红黑树(查找时间复杂度为 O(logn))来优化这个问题。但是链表大于8的概率是非常非常低的。
选择Integer,String这种不可变的类型,像对String的一切操作都是新建一个String对象,对新的对象进行拼接分割等,这些类已经很规范的覆写了hashCode()以及equals()方法。作为不可变类天生是线程安全的。如果要使用自定义类做为Key,就需要重写hashCode()以及equals()方法。红黑树在做比较的时候使用的是System.identityHashCode()方法,是不需要做特殊处理的。
更多内容戳这里(整理好的各种文集)
以上就是关于红黑树的原理,红黑树原理讲解的全部内容,以及红黑树的原理的相关内容,希望能够帮到您。
版权声明:本文来自用户投稿,不代表【推酷网】立场,本平台所发表的文章、图片属于原权利人所有,因客观原因,或会存在不当使用的情况,非恶意侵犯原权利人相关权益,敬请相关权利人谅解并与我们联系(邮箱:350149276@qq.com)我们将及时处理,共同维护良好的网络创作环境。
大家都在看
-
领导滥用职权该怎么投诉,领导滥用职权怎么举报
综合百科本文目录1.领导滥用职权怎么举报2.公司领导滥用职权去哪里投诉3.怎么举报领导滥用职权不被发现4.投诉政府官员怎么做效果最好领导滥用职权怎么举报法律主观:领导滥用职权,如果违反了公司的规章制度且损害劳动者的合法权益的,则劳动者可以拨打电话或者直接前往劳动行政部门投诉;如果涉嫌犯罪
-
苹果手机iphone 官方高保机是什么意思
综合百科苹果手机iphone 官方高保机是什么意思苹果官方高保机的意思是出厂时间不太多,保修期剩余的比较长的行货翻新机,行货翻新机分为三种,高保、低保、非保。低保就是比较短,或者即将过保。第三就是已经不在保修期范围内。iPhone是由美国苹果公司研发的智能手机系列,搭载其研发的iOS操作
-
70岁为古稀之年什么意思,古稀之年是指多少岁的人
综合百科70岁为古稀之年什么意思古人把人的70岁称为古稀,稀就是少的意思。七十岁亦称为悬车之年、杖围之年。而把70岁高龄老人称作古稀老人,是来源于唐代大诗人杜甫的一首叫做《曲江二首》的诗,诗中写道:“酒债寻常行处有,人生七十古来稀。”杜甫感叹人生何其短暂,能活到70岁的人实在是太少了。明
-
办理结婚证在哪里,结婚证到哪里去办理
综合百科本文目录1.结婚证到哪里去办理2.领结婚证去哪里领叶酸3.结婚证在哪里领4.结婚证在哪领对以后有影响吗结婚证到哪里去办理结婚证去所在地民政局办理。领结婚证需要结婚当事人双方都带好户口本、身份证原件到其中一方户口所在地民政局办理结婚登记手续,才可以领到结婚证。如果两人都是外地的,那
-
菠萝要用多少盐,菠萝泡盐水放多少盐合适
综合百科菠萝要用多少盐500毫升水5、6克盐就行。食盐能抑制菠萝酶的活力。因此,当我们吃鲜菠萝时,最好先用盐水泡上一段时间,就可以抑制菠萝酶对我们口腔粘膜和嘴唇的刺激,同时也会感到菠萝更加香甜了。如果不用盐水先泡就吃,这种酶对于我们口腔粘膜和嘴唇的幼嫩表皮有刺激作用,会使我们感一种麻刺痛
-
叶子有刺的桂花树是什么品种
综合百科叶子有刺的桂花树是什么品种叶子有刺的桂花树是刺桂品种。刺桂是常绿灌木或小乔木,高1-6米,四季常青,入秋百花朵朵,香气弥漫,是良好的观赏树种。分布于南部暖带落叶阔叶林区,北亚热带落叶、常绿阔叶混交林区,中亚热带常绿、落叶阔叶林区,南亚热带常绿阔叶林区。 以上就是关于叶子有刺的桂
-
关于悲痛的格言,伤感名人名言经典语录
综合百科关于悲痛的格言最痛苦的爱情莫过于当你痴迷于中时,发现一切原来都是场骗局。有一种悲痛是在心里号啕,掉下来的不是咸泪是扑簌簌的心头肉,悲痛之后身体是空的像在山谷里听回声听已经远去的疼。我伸手牵住了过往的风,会不会有泪水是在为我流;一切就像黑色的梦,醒了还会心痛;大雨滂沱我像找到了归所
-
如何隐藏qq号让人无法查找
综合百科如何隐藏qq号让人无法查找隐藏qq号让人无法查找的操作步骤是:1、在电脑上登录qq。2、点击qq主界面下方的三横线选项。3、弹出的选项里点击【帮助】,然后选择打开【我的qq中心】。4、在打开的界面点击上方的【账号】选项。5、点击关闭【其他人可在QQ查找通过qq号码找到您】这个选项
-
日语中内定是什么意思,私の弟は希望の会社に内定し、喜んでいる
综合百科日语中内定是什么意思内定:多指人事调配或处理其他人事问题;现代词语“内定”往往和后门,腐败等消极因素放置一起,但是日语中一般说的“内定”的确是指“已经内部确定”(不过未必是指走后门),在日语中内定(公表されてはいないが、内々で定まること。また、決めること。),日语中常用语法:社員
-
翡翠原石怎么保养,翡翠原石怎么保养会越来越亮
综合百科本文目录1.翡翠原石怎么保养会越来越亮2.翡翠原石怎么介绍3.翡翠原石怎么养水头4.翡翠原石怎么辨别翡翠原石怎么保养会越来越亮翡翠原石切片后怎么保养1、如果条件允许,最好戴上防切割手套、护目镜等防具。挖脏尽管去掉了皮壳,但是原石仍然有一些皮上杂质深深嵌到了翡翠原石的内部,所以这时
-
动物运动的意义是什么,运动对动物生存的意义是
综合百科本文目录1.运动对动物生存的意义是2.动物运动的意义有没有利于物种进化3.动物的运动和行为有什么意义呢4.动物常见的运动方式有哪些运动对动物生存的意义是【答案】D【答案解析】试题分析:动物所进行的一系列有利于他们存活和繁殖后代的活动,都是动物的行为,常常表现为各种各样的运动,动物
-
婚房拉花怎么挂,婚房拉花怎么固定
综合百科婚房拉花怎么挂1、屋顶正中。这个位置需要大型的花球拉花装扮。大型的花球很有视觉冲击力,加上四条从中间向四角伸展的纱质拉花,美感不言而喻。2、窗口。这种拉花可以放在窗口,不仅在室外光线的照耀下十分艳丽,更可以避免窗口过于空洞,提升婚房美感。3、床头。一般床头放比较小的,左右对称的拉