红黑树理解(五)右旋
红黑树理解 (一) 从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;}...}...
}
红黑树理解(五)右旋相关推荐
- 红黑树理解(四) 左旋
红黑树理解 (一) 从2-3树到红黑树 红黑树理解(二)插入过程图解 红黑树理解(三)变色 红黑树理解(四)左旋 红黑树理解(五)右旋 左旋的目的是什么? 称以旋转节点为根节点的红黑树为T,左旋的目的 ...
- Linux内存管理之红黑树(五)
一.什么是红黑树 1.1.二叉查找树 想要学习红黑树,就必须先理解一下二叉树(Binary Search Tree)[BST] 左子树上所有节点的值均小于或等于它的根结点的值 右子树上所有节点的值均大 ...
- 详解红黑树之左旋右旋
为什么要左旋右旋? 为了使得左右子树的高度差在一定范围内,需要通过旋转调整,这样就可以保持平稳的搜索效率 左旋: 步骤 1.设原来E的父节点是father,那么左旋之后需要改变的是: 2.S和fath ...
- HashMap的工作原理和底层实现(二)红黑树的左旋、右旋
HashMap中的红黑树左旋.右旋 摘要: HashMap是java最常用的容器之一,本文会通过阅读源码的方式来理解HashMap中是如何进行红黑树的左旋和右旋 一.什么是左旋和右旋 红黑树的性质 每 ...
- HashMap 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转
树结构是数据结构中最经典最常用的结构之一,也是面试中常问的面试题,最近学习了一下红黑树的知识,记录整理一下 文章目录 一.红黑树的特征 二.变色左旋和右旋 1.变色规则 2.左旋 3.右旋 总结 前言 ...
- 面试旧敌之红黑树(直白介绍深入理解)
2019独角兽企业重金招聘Python工程师标准>>> 读完本文你将了解到: 什么是红黑树 黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定 ...
- 重温数据结构:深入理解红黑树
读完本文你将了解到: 什么是红黑树 黑色高度 红黑树的 5 个特性 红黑树的左旋右旋 指定节点 x 的左旋 右图转成左图 指定节点 y 的右旋左图转成右图 红黑树的平衡插入 二叉查找树的插入 插入后调 ...
- Android技术栈(五)HashMap(包括红黑树)与ArrayMap源码解析
1 总览 本文会对 Android 中常用HashMap(有红黑树)和ArrayMap进行源码解析,其中 HashMap 源码来自 Android Framework API 28 (JDK=1.8) ...
- 二叉树(BT)、二叉查找树(BST)、平衡二叉树(AVL)、B-Tree、B+Tree、红黑树(BRT)
目录 树的概念 树的分类 二叉树 二叉查找树 平衡二叉树(AVL) B-Tree(平衡多路查找树) B树的关键特征 B+Tree B+树关键特征 红黑树(BRT) 左旋 右旋 时间复杂度 树形结构是一 ...
最新文章
- 三十、赫夫曼树的设计与代码实现
- Unable to save settings: Failed to save settings. Please restart IntelliJ IDEA
- WebAPI(part11)--DOM重点核心
- java 枚举类型enum用法_别再说Python没有枚举类型了,好好看看
- Java里面Unreachable code
- 工作80:块级元素的间隙问题
- 【转】C++学习二 vector的用法(使用sort对于vector排序)
- html左滑效果图,前端福利——左滑右滑,绝对是你见过的最简单的写法 - 你猜猜看...
- gaia引擎分析(一)资源管理
- win10安装ipython_win10下安装Anaconda的教程(python环境+jupyter_notebook)
- paip..net VS2010提示当前上下文中不存在名称的解决
- 家用千兆路由器哪款好?家用千兆无线路由器推荐TOP10!
- 记一次机房断电办公室网络瘫痪的恢复经过
- 智能家居系统设计(裸机stm32/μCOS-III)
- .com.cn域名是什么?.com.cn域名有哪些优势?
- 什么?学了C语言还不会表白,下面的多彩小心心快去拿给那个她吧
- 数据结构----线性表
- python3.6的新特性:f-strings格式化输出;python3.8新特性:f-strings增加了 = 说明符
- input触发的事件触发流程
- UESTC-1059 秋实大哥与小朋友(离散化+线段树)