数据结构 - 红黑树 - 面试常问知识点

数据结构是面试中必定考查的知识点,面试者需要掌握几种经典的数据结构:线性表(数组、链表)、栈与队列(二叉树、二叉查找树、平衡二叉树、红黑树)、

本文主要介绍中的常见的红黑树数据结构。包括

  • 简介
  • 应用
  • 左旋和右旋

简介

R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。

红黑树的性质:

  • (1). 每个节点或者是黑色,或者是红色。
  • (2). 根节点是黑色。
  • (3). 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!]
  • (4). 如果一个节点是红色的,则它的子节点必须是黑色的。
  • (5). 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
  • (6). 一棵含有n个节点的红黑树的高度至多为2log(n+1)2log(n+1)。
  • (7). 红黑树的时间复杂度为: O(logn)O(logn)。

注意:

  • 特性(3)中的叶子节点,是只为空(NIL或null)的节点。
  • 特性(5)确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对是接近平衡的二叉树。

红黑树示意图如下:


红黑树的引用

红黑树的应用比较广泛,主要是用它来存储有序的数据,它的时间复杂度是O(logn)O(logn),效率非常之高。

例如,Java集合中的TreeSetTreeMap,C++ STL中的set、map,以及Linux虚拟内存的管理,都是通过红黑树去实现的。


左旋和右旋

红黑树的基本操作是添加、删除。在对红黑树进行添加或删除之后,都会用到旋转方法。为什么呢?
道理很简单,添加或删除红黑树中的节点之后,红黑树就发生了变化,可能不满足红黑树的5条性质,也就不再是一颗红黑树了,而是一颗普通的树。
而通过旋转,可以使这颗树重新成为红黑树。简单点说,旋转的目的是让树保持红黑树的特性。
旋转包括两种:左旋右旋。下面分别对它们进行介绍。

1. 左旋

对x进行左旋,意味着”将x变成一个左节点”。


2. 右旋

对Y进行右旋,意味着”将Y变成一个右节点”。


仔细观察上面”左旋”和”右旋”的示意图。我们能清晰的发现,它们是对称的。无论是左旋还是右旋,被旋转的树,在旋转前是二叉查找树,并且旋转之后仍然是一颗二叉查找树。

数据结构 - 红黑树相关推荐

  1. 数据结构-红黑树插入结点示例

    数据结构-红黑树插入结点示例 1.红黑树简介 2.在线可视化生成红黑树工具 3.红黑树插入结点性质和规则 3.1.红黑树插入结点性质 3.2.红黑树插入结点规则 4.红黑树插入结点示例 4.1.红黑树 ...

  2. 数据结构 红黑树(RBTree)的原理与实现

    学习红黑树之前你应该保证你学过AVL树,也就是平衡二叉搜索树 数据结构 AVL树 AVL树是一棵高度平衡的二叉搜索树,其要求每个结点的高度差不能大于1,这样子就保证了其查询的时间复杂度为log2(N) ...

  3. java数据结构红黑树上旋下旋_存储系统的基本数据结构之一: 跳表 (SkipList)

    在接下来的系列文章中,我们将介绍一系列应用于存储以及IO子系统的数据结构.这些数据结构相互关联又有着巨大的区别,希望我们能够不辱使命的将他们分门别类的介绍清楚.本文为第一节,介绍一个简单而又有用的数据 ...

  4. 高级数据结构——红黑树

    目录 红黑树 红黑树定义 红黑树节点实现 红黑树插入实现 红黑树删除实现 红黑树 红黑树定义 在之前介绍AVL树时,我们知道AVL树是高度平衡的二叉搜索树,而高度平衡意味着在对AVL树中的节点作更新操 ...

  5. 数据结构-红黑树原理分析

    前言 在阅读HashMap源码的时候发现,java1.8的HashMap的链表实现增加了红黑树,当链表长度超过指定阈值8的时候回进行树化. 为了提高增删查的效率. 而红黑树又比较复杂,所以专门写一篇关 ...

  6. 数据结构-----红黑树的插入操作

    红黑树是一棵二叉搜索树:树种每一个节点的颜色不是黑色就是红色.本篇中只实现用节点的颜色来描述红黑树,性质如下: RB1:根节点和所有外部节点都是黑色: RB2:在根至外部节点路径上,没有连续两个节点是 ...

  7. 数据结构--红黑树 Red Black Tree

    文章目录 1.概念 2.操作 2.1 左旋.右旋(围绕某个节点的左/右旋) 2.2 插入 2.3 删除 3. 代码 1.概念 二叉树在频繁动态增删后,可能退化成链表,时间复杂度由 O(lgn) 变成 ...

  8. 数据结构---红黑树的原理

    产生原因 有了AVL树为啥需要红黑树呢,我们知道AVL树可以保证查询的时间复杂度为O(long 2^N),但是我们知道AVL树的插入操作,结点之间调整非常复杂,导致AVL树的性能非常低下. 红黑树,是 ...

  9. 数据结构——红黑树(red-black tree)

    RB-tree(红黑树)是一种平衡二叉搜索树,它每个节点上增加了一个存储位来表示节点的颜色,可以是 Red 或 Black,故得名.通过对任何一条从根到叶子的简单路径上各个节点的颜色进行约束,红黑树能 ...

最新文章

  1. 模板 - 有向图的连通性
  2. 浅析@Deprecated,调用方法时出现横线划掉样式
  3. CentOS 安装Python 3.52
  4. Linux学习笔记 --服务器优化
  5. jquery ajax 调用webservice以及跨域问题
  6. 双色球助手2.0---最新发布----完全免费
  7. LeetCode常见报错解释
  8. Android高级界面设计
  9. Android阿拉伯适配rtl
  10. 网关、开放平台如何设计appKey,appSecret,accessToken的生成和校验机制
  11. 蛋白质结构信息获取与解析(基于Biopython)
  12. ceph-pg状态详解
  13. 互联网IT就业市场,你要说最有市场的一定是它,linux内核视频教程全套
  14. 顺序结构,选择结构和循环结构
  15. idea中的Diagram功能,查看类图
  16. 2022-雨课堂-工程伦理期末考试答案
  17. 文本检索系统-1:简介
  18. 如何实现 List 集合去重?
  19. JavaScript 在元素前后添加元素
  20. web端分屏异显实现-Angular+Electron

热门文章

  1. Linux服务-DHCP服务部署
  2. 查看计算机.net环境版本,windows7系统查看NET Framework版本的两种方法
  3. Windows 系统版本判断
  4. 网络编程释疑之:同步,异步,阻塞,非阻塞
  5. STL 之reverse,reverse_copy,rotate,rotate_copy
  6. 一文读懂浏览器存储与缓存机制
  7. 第30讲:如何爬app的数据
  8. Linux 操作系统太难?先爬过这 6 个陡坡
  9. MPEG中面向沉浸式视觉体验的标准化活动
  10. Janus流媒体服务器信令分析