小白解析红黑树的基本

  • 什么是红黑树
    • 变色
    • 右旋
      • 什么是右旋呢?
    • 左旋
      • 什么情况下会左旋

什么是红黑树

这就是一个简单的红黑二叉树
红黑二叉树有以下几条基本的规则:
1. 节点分为红色或者黑色。
2.根节点必为黑色。
3.叶子节点都为黑色,且为 null。
4.连接红色节点的两个子节点都为黑色(红黑树不会出现相邻的红色节点)。
5. 从任意节点出发,到其每个叶子节点的路径中包含相同数量的黑色节点。
6. 新加入到红黑树的节点为红色节点。

变色

为什么需要变色:
首先我们知道,当新加入节点后,其节点为红色,我们就一上面的红黑树为例,假如我们加入一个值为3的节点,

此时,这个二叉树就不符合红黑二叉树的“红黑树不会出现相邻的红色节点”这一条规则,那么此时就需要变色
什么情况下会变色

1.变色的情况:当前节点的父亲节点为红色节点,并且他的爷爷节点的另一个节点也是红色(叔叔节点)

这就符合变色的条件,那么如何变色呢?

1.把父节点设为黑色
2.把叔叔也设为黑色
3.把爷爷设为红色
4.把指针指向到爷爷节点设置为要操作的

变色完成后

此时又有了问题:9节点和11节点又是相连的红色节点,此时我们操作的指向也指向到了9节点,那么我们现在也不能使用变色了,因为不符合变色的条件

所以我们就要引入左旋右旋了

右旋

进行右旋的条件:
1.点前父节点为红色,叔叔节点为黑色,并且当前的节点是左子树时,以父节点为支点右旋

此时我们经过变色,指针操作指向了3的爷爷节点,也就是9节点,我们看图阔以看出,9和11都是红色节点,而且19为黑色节点,并且9是11的左子树,所以可以进行右旋

什么是右旋呢?

我们就以这个案例进行右旋
找到一个支点(这里进行右旋是以9的父节点也就是11节点为支点右旋


右旋的改变:

1.把父节点设为黑色
2.把爷爷节点设为红色
3.以爷爷节点为支点旋转

这样这棵树就符合了红黑树的几条规则

左旋

我们以下案例来介绍

此时,这棵树的8节点和10节点相连并且都为红色,我们就以10节点进行操作。显然不满足变色的条件


这时候我们就要使用与右旋相似的左旋进行结构改变

什么情况下会左旋

当前节点的父节点为红色,叔叔节点为黑色,且点前的节点是右子树,左旋以父节点为支点左旋

左旋与右旋的结构类型,左旋以一个节点的父节点进行旋转,把父节点的另一个节点(兄弟节点)挂在爷爷节点的左边

这时在进行右旋就能完成红黑树。

红黑二叉树的左旋右旋和变色相关推荐

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

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

  2. 二叉树旋转--左旋|右旋

    二叉树旋转 二叉树的旋转主要是应用在AVL树中,当添加一个节点时候导致左右两个子树的高度差不在是-1 , 1 , 0而变成了2 或者-2.此时就需要用到左旋/右旋了.当然左右旋或者有左旋也是基于左旋和 ...

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

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

  4. 红黑树简介及左旋、右旋、变色

    红黑树简介及左旋.右旋.变色 红黑树(Red Black Tree)是一种自平衡二叉搜索树(二叉查找树),是一种特殊的二叉搜索树,在进行插入和删除时通过特定操作保持二叉树自身的平衡,从而获得较高的查找 ...

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

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

  6. java数据结构15_二叉树和红黑二叉树

    l 二叉树的定义 二叉树是树形结构的一个重要类型. 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重 ...

  7. Java/二叉树,红黑二叉树

    二叉树的定义 二叉树是树形结构的一个重要类型. 许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要. ...

  8. 关于红黑二叉树的理解

    最近看了些关于红黑二叉树的博客,有一些自己的见解. 红黑二叉树是一种特殊的平衡二叉树,拥有平衡二叉树的所有特征,这里就不再重复. 红黑二叉树的规则: 1.每个节点都必须有叶子节点(叶子节点没有任何数据 ...

  9. java容器之七_TreeMap与红黑二叉树

    TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...

最新文章

  1. python中按钮关联两个函数_两个函数,在一个函数运行的情况下,点击按钮运行第二个...
  2. java不会自动提示_eclispe中打点不会提示的解决方法,以及自动补全
  3. linux多开终端,如何使用Tmux终端多开工具
  4. 常见的服务器内存浅析
  5. 认清js中var a=b=1和var a=1,b=1的区别
  6. 点击事件为什么会失效_耐高温润滑油脂为什么会失效?
  7. Fusioncharts图表组件在宿舍评分统计中的应用
  8. tomcat mysql如何优化_Tomcat+Mysql高并发配置优化讲解
  9. 基于混沌的图像置乱加密算法及matlab的实现,基于混沌的图像置乱加密算法及MATLAB的实现...
  10. 已火 2 年,Service Mesh究竟给微服务带来了什么?
  11. java hibernate方言_java – 如何在运行时获取Hibernate方言
  12. python unittest断言_python接口自动化(二十四)--unittest断言——中(详解)
  13. 上下求索——基于双向推理的多跳知识库问答技术
  14. 有手就行:零基础渗透网站步骤
  15. xmos-XU208-128-QF48芯片简介
  16. 北大计算机所有专业都分学硕和专硕,毕业后才明白,学硕和专硕的差距不是一星半点,幸好当年没选错...
  17. Input系统学习-----move事件的合并
  18. Navicat Premium安装和激活
  19. 文储研习社第11期 | DAO的前世今生
  20. 列车售票系统源代码c语言,火车站售票查询系统 C语言 源代码

热门文章

  1. Cadence+SPB16.2入门教程(上)
  2. FFmpeg/FFplay/常用命令
  3. 新时代手机产品战争打响
  4. divmod( )函数
  5. 生成器的send方法
  6. Azure云服务基础其四
  7. 【报告分享】大湾区房地产指南-仲量联行(附下载)
  8. .伤心时最好读的28句经典语录
  9. 查看Linux系统文件夹下各文件所占空间大小
  10. 文献阅读:NAD+代谢相关基因在肌萎缩侧索硬化症中的预后研究