树结构是数据结构中最经典最常用的结构之一,也是面试中常问的面试题,最近学习了一下红黑树的知识,记录整理一下

文章目录

  • 一、红黑树的特征
  • 二、变色左旋和右旋
    • 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 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转相关推荐

  1. nyoj202 红黑树 (二叉树的左旋右旋)

    题目202 题目信息 运行结果 本题排行 讨论区 红黑树 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子 ...

  2. 红黑二叉树的左旋右旋和变色

    小白解析红黑树的基本 什么是红黑树 变色 右旋 什么是右旋呢? 左旋 什么情况下会左旋 什么是红黑树 这就是一个简单的红黑二叉树 红黑二叉树有以下几条基本的规则: 1. 节点分为红色或者黑色. 2.根 ...

  3. java实现红黑树 新增节点 左旋右旋 hash取模

    package com.yeyu.study1.list;/*** 红黑树** 1.构建节点对象结构 定义颜色属性* 2.辅助方法定义: parentOf(node) isRed(node) , is ...

  4. 红黑树的基本原理和左旋右旋

    红黑树: 平衡二叉树 1.根节点的左边都是比根节点小的,右边都是比根节点大的 2.不能有两个连续的红色,可以有两个连续的黑色 3.首先插入时默认都是红色 4.当某一个节点为红色,他的父节点和叔叔节点也 ...

  5. 详解红黑树之左旋右旋

    为什么要左旋右旋? 为了使得左右子树的高度差在一定范围内,需要通过旋转调整,这样就可以保持平稳的搜索效率 左旋: 步骤 1.设原来E的父节点是father,那么左旋之后需要改变的是: 2.S和fath ...

  6. 重温数据结构:深入理解红黑树

    读完本文你将了解到: 什么是红黑树 黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定节点 y 的右旋左图转成右图 红黑树的平衡插入 二叉查找树的插入 插入后调 ...

  7. 【源码解析】HashMap源码跟进(红黑树的实现)

    HashMap中红黑树的定义和它内部的方法 static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> ...

  8. 数据结构学习——RBT(红黑树)以及实现Map和Set

    我们知道,二叉搜索树是个很好的数据结构,可以快速地找到一个给定关键字的数据项,并且可以快速地插入和删除数据项.但是二叉搜索树有个很麻烦的问题,如果树中插入的是随机数据,则执行效果很好,但如果插入的是有 ...

  9. HashMap的工作原理和底层实现(二)红黑树的左旋、右旋

    HashMap中的红黑树左旋.右旋 摘要: HashMap是java最常用的容器之一,本文会通过阅读源码的方式来理解HashMap中是如何进行红黑树的左旋和右旋 一.什么是左旋和右旋 红黑树的性质 每 ...

最新文章

  1. 水晶报表主子报表分页问题
  2. Mediostream框架filter使用说明
  3. Linux下axel多线程下载
  4. 16行代码AC——紫书| 例题7-3 Fractions Again?! (UVA - 10976)_时间复杂度O(n)
  5. java实参将数据传递给形参的两种形式
  6. c语言让系统蓝屏,0x000000116,教您解决电脑蓝屏代码0x000000116
  7. 国内maven仓库地址资源汇总
  8. 3月21日阿里云北京峰会的注册二维码
  9. windows配置路由表办公网和外网自动切换
  10. VLAN划分和网络配置实例
  11. 基于php的大学学生宿舍网上报修管理系统
  12. SEO项目管理,该问自己的几个问题?
  13. 《量化投资策略如何实现超额收益》简介及PDF电子书下载
  14. 电磁场与波 matlab,电磁场数值计算法与MATLAB实现
  15. NOI 1966 玛雅历
  16. 计算机任务管理器无法响应,电脑任务管理器经常未响应怎么办
  17. latex怎么打区间_latex 函数中间点
  18. Java txt文件 转 utf-8 格式
  19. pandas常用命令
  20. 小猫打螃蟹-第10届蓝桥杯Scratch省赛真题第2题

热门文章

  1. vue项目,报错This is probably not a problem with npm,there is likely additional logging output above
  2. SKNet: Selective Kernel Networks
  3. Android 获取文件名 乱码
  4. JavaScript 设计模式之发布-订阅模式(上)
  5. 03基础自绘-18手机通讯录-telwidget
  6. Batch Nornaliation:Accelerating Deep Network Training by ReducingInternal Covariate Shift
  7. 常见的乳腺癌标记物研究
  8. [Codewar练习-java]Snail Sort(蜗牛型排序)
  9. C# MessageBox.Show 用法
  10. Git服务器搭建及仓库克隆