HashMap 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转
树结构是数据结构中最经典最常用的结构之一,也是面试中常问的面试题,最近学习了一下红黑树的知识,记录整理一下
文章目录
- 一、红黑树的特征
- 二、变色左旋和右旋
- 1.变色规则
- 2.左旋
- 3.右旋
- 总结
前言
面试中我们经常会被问到 HashMap 在 1.7 和 1.8 的区别,在 jdk 1.8 中,当链表的长度超过8 数组长度大于64时数据结构改为了红黑树 ,当新插入一个值的时候,红黑树可能会进行变色 左旋 右旋的操作, 这里对红黑树在什么情况下进行 变色 左旋 右旋 的操作做一下整理
一、红黑树的特征
(1)每个节点或者是黑色,或者是红色
(2)根节点是黑色
(3)每个红色节点的两个子节点都是黑色。( 即: 不能有两个连续的红色节点 )
(4)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点
二、变色左旋和右旋
1. 变色规则
当前结点的父亲是红色,且它的祖父结点的另一个子结点也是红色(叔叔结点):
(1)把父节点设为黑色
(2)把叔叔也设为黑色
(3)把祖父也就是父亲的父亲设为红色(爷爷)
(4)把指针定义到祖父结点设为当前要操作的(爷爷)分析的点变换的规则
这里我们新插入一个值 6 ( 插入的节点都是红色的 所以 6 是红色的节点 ) ,变色后的图形
2.左旋
当前父结点是红色,叔叔是黑色的时候,且当前的结点是右子树。左旋
左旋动态图 ( 爷爷从上面回来 爸爸从下面上去 以前挂靠着爸爸 现在挂靠着爷爷 )
当前结构不满足红黑色,这里做一下左旋
3.右旋
当前父结点是红色,叔叔是黑色的时候,且当前的结点是左子树。右旋
(1)把父节点变为黑色
(2)把祖父结点变为红色(爷爷)
(3)把祖父结点旋转(爷爷)
右旋动态图
当前结构不满足红黑色,这里进行一下右旋
总结
以上是关于红黑树变色 左旋 右旋的一些规则,也是面试中常见的问题之一,这里对学习红黑树后做一下整理记录
HashMap 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转相关推荐
- nyoj202 红黑树 (二叉树的左旋右旋)
题目202 题目信息 运行结果 本题排行 讨论区 红黑树 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子 ...
- 红黑二叉树的左旋右旋和变色
小白解析红黑树的基本 什么是红黑树 变色 右旋 什么是右旋呢? 左旋 什么情况下会左旋 什么是红黑树 这就是一个简单的红黑二叉树 红黑二叉树有以下几条基本的规则: 1. 节点分为红色或者黑色. 2.根 ...
- java实现红黑树 新增节点 左旋右旋 hash取模
package com.yeyu.study1.list;/*** 红黑树** 1.构建节点对象结构 定义颜色属性* 2.辅助方法定义: parentOf(node) isRed(node) , is ...
- 红黑树的基本原理和左旋右旋
红黑树: 平衡二叉树 1.根节点的左边都是比根节点小的,右边都是比根节点大的 2.不能有两个连续的红色,可以有两个连续的黑色 3.首先插入时默认都是红色 4.当某一个节点为红色,他的父节点和叔叔节点也 ...
- 详解红黑树之左旋右旋
为什么要左旋右旋? 为了使得左右子树的高度差在一定范围内,需要通过旋转调整,这样就可以保持平稳的搜索效率 左旋: 步骤 1.设原来E的父节点是father,那么左旋之后需要改变的是: 2.S和fath ...
- 重温数据结构:深入理解红黑树
读完本文你将了解到: 什么是红黑树 黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定节点 y 的右旋左图转成右图 红黑树的平衡插入 二叉查找树的插入 插入后调 ...
- 【源码解析】HashMap源码跟进(红黑树的实现)
HashMap中红黑树的定义和它内部的方法 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> ...
- 数据结构学习——RBT(红黑树)以及实现Map和Set
我们知道,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项.但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有 ...
- HashMap的工作原理和底层实现(二)红黑树的左旋、右旋
HashMap中的红黑树左旋.右旋 摘要: HashMap是java最常用的容器之一,本文会通过阅读源码的方式来理解HashMap中是如何进行红黑树的左旋和右旋 一.什么是左旋和右旋 红黑树的性质 每 ...
最新文章
- 水晶报表主子报表分页问题
- Mediostream框架filter使用说明
- Linux下axel多线程下载
- 16行代码AC——紫书| 例题7-3 Fractions Again?! (UVA - 10976)_时间复杂度O(n)
- java实参将数据传递给形参的两种形式
- c语言让系统蓝屏,0x000000116,教您解决电脑蓝屏代码0x000000116
- 国内maven仓库地址资源汇总
- 3月21日阿里云北京峰会的注册二维码
- windows配置路由表办公网和外网自动切换
- VLAN划分和网络配置实例
- 基于php的大学学生宿舍网上报修管理系统
- SEO项目管理,该问自己的几个问题?
- 《量化投资策略如何实现超额收益》简介及PDF电子书下载
- 电磁场与波 matlab,电磁场数值计算法与MATLAB实现
- NOI 1966 玛雅历
- 计算机任务管理器无法响应,电脑任务管理器经常未响应怎么办
- latex怎么打区间_latex 函数中间点
- Java txt文件 转 utf-8 格式
- pandas常用命令
- 小猫打螃蟹-第10届蓝桥杯Scratch省赛真题第2题
热门文章
- vue项目,报错This is probably not a problem with npm,there is likely additional logging output above
- SKNet: Selective Kernel Networks
- Android 获取文件名 乱码
- JavaScript 设计模式之发布-订阅模式(上)
- 03基础自绘-18手机通讯录-telwidget
- Batch Nornaliation:Accelerating Deep Network Training by ReducingInternal Covariate Shift
- 常见的乳腺癌标记物研究
- [Codewar练习-java]Snail Sort(蜗牛型排序)
- C# MessageBox.Show 用法
- Git服务器搭建及仓库克隆