数据结构 - 红黑树

我会带着你远行 2022-06-01 02:46 300阅读 0赞

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

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

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

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

简介

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

红黑树的性质:

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

注意:

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

红黑树示意图如下:
红黑树


红黑树的引用

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

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


左旋和右旋

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

  1. 左旋

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

左旋
左旋例子

  1. 右旋

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

右旋
右旋例子

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

左右旋对比

发表评论

表情:
评论列表 (有 0 条评论,300人围观)

还没有评论,来说两句吧...

相关阅读

    相关 数据结构

    一. 红黑树的概念 红黑树是一颗二叉搜索树,它的每个结点增加一个存储单位来表示结点的颜色,这个颜色是red或者black,通过对任何一条从根结点到叶子结点上的颜色来约束,

    相关 数据结构 -

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

    相关 数据结构_

    红黑树 红黑树也是属于一种BBST。在之前介绍的[伸展树][Link 1]中,虽然实现简单,分摊复杂度低,但是最坏情况下的操作需要O(n)时间,无法适用于对单次效率敏感的

    相关 数据结构--

    为什么要平衡 在上一节中,我们了解了 `二叉搜索树` 具有较稳定和较高的插入搜索效率。但是在某些极端情况下, 它的效率也会退化到 `链表` 的地步。 ![2018122