红黑树理解 (一) 从2-3树到红黑树
红黑树理解(二)插入过程图解
红黑树理解(三)变色
红黑树理解(四)左旋
红黑树理解(五)右旋

右旋的目的是什么?

将以旋转节点为根的红黑树的根节点左移,配合其他操作使红黑树恢复平衡。

右旋的条件是什么?

  • 左子节点不为空。
  • 旋转节点的左路,存在两个相连的红色节点。

右旋的具体步骤是什么?

以某个结点作为旋转结点,其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。 出自:30张图带你彻底理解红黑树。也就是

  • 左子节点变为旋转节点的父节点。
  • 左子节点的右子节点变为旋转节点的右子节点。

右旋举例

(一)选转节点为插入节点的爷爷节点
再列举个稍微不同的情况,旋转节点不是根节点:下图中插入的节点是1,旋转节点是5,5不是根节点。

(二)旋转节点是插入节点的父节点
下图中,插入节点是7,旋转节点是8,旋转节点是插入节点的父节点。

右旋的Java代码实现

jdk1.8 HashMap.java,代码分析后面介绍。

public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {...static <K,V> TreeNode<K,V> rotateRight(TreeNode<K,V> root,TreeNode<K,V> p) {TreeNode<K,V> l, pp, lr;if (p != null && (l = p.left) != null) {if ((lr = p.left = l.right) != null)lr.parent = p;if ((pp = l.parent = p.parent) == null)(root = l).red = false;else if (pp.right == p)pp.right = l;elsepp.left = l;l.right = p;p.parent = l;}return root;}...}...
}

红黑树理解(五)右旋相关推荐

  1. 红黑树理解(四) 左旋

    红黑树理解 (一) 从2-3树到红黑树 红黑树理解(二)插入过程图解 红黑树理解(三)变色 红黑树理解(四)左旋 红黑树理解(五)右旋 左旋的目的是什么? 称以旋转节点为根节点的红黑树为T,左旋的目的 ...

  2. Linux内存管理之红黑树(五)

    一.什么是红黑树 1.1.二叉查找树 想要学习红黑树,就必须先理解一下二叉树(Binary Search Tree)[BST] 左子树上所有节点的值均小于或等于它的根结点的值 右子树上所有节点的值均大 ...

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

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

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

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

  5. HashMap 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转

    树结构是数据结构中最经典最常用的结构之一,也是面试中常问的面试题,最近学习了一下红黑树的知识,记录整理一下 文章目录 一.红黑树的特征 二.变色左旋和右旋 1.变色规则 2.左旋 3.右旋 总结 前言 ...

  6. 面试旧敌之红黑树(直白介绍深入理解)

    2019独角兽企业重金招聘Python工程师标准>>> 读完本文你将了解到: 什么是红黑树 黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定 ...

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

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

  8. Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析

    1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...

  9. 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)

    目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...

最新文章

  1. 三十、赫夫曼树的设计与代码实现
  2. Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
  3. WebAPI(part11)--DOM重点核心
  4. java 枚举类型enum用法_别再说Python没有枚举类型了,好好看看
  5. Java里面Unreachable code
  6. 工作80:块级元素的间隙问题
  7. 【转】C++学习二 vector的用法(使用sort对于vector排序)
  8. html左滑效果图,前端福利——左滑右滑,绝对是你见过的最简单的写法 - 你猜猜看...
  9. gaia引擎分析(一)资源管理
  10. win10安装ipython_win10下安装Anaconda的教程(python环境+jupyter_notebook)
  11. paip..net VS2010提示当前上下文中不存在名称的解决
  12. 家用千兆路由器哪款好?家用千兆无线路由器推荐TOP10!
  13. 记一次机房断电办公室网络瘫痪的恢复经过
  14. 智能家居系统设计(裸机stm32/μCOS-III)
  15. .com.cn域名是什么?.com.cn域名有哪些优势?
  16. 什么?学了C语言还不会表白,下面的多彩小心心快去拿给那个她吧
  17. 数据结构----线性表
  18. python3.6的新特性:f-strings格式化输出;python3.8新特性:f-strings增加了 = 说明符
  19. input触发的事件触发流程
  20. UESTC-1059 秋实大哥与小朋友(离散化+线段树)

热门文章

  1. 技术人员的非技术生活
  2. ie6的兼容问题总结
  3. unity探索者之Shader Graph所有节点详解-Master篇
  4. 纯CSS 撩妹3D旋转相册
  5. 小杜 才疏学浅的医学数据分析资料
  6. Openlayers之加载谷歌地图
  7. 智慧景区总体技术架构
  8. php使用curl下载文件
  9. 敲代码时如何快速移动光标_数控加工中心编程入门知识,半小时快速入门!超简洁明了!...
  10. springboot启动不打印日志信息_springboot项目大量打印debug日志问题