数据结构-红黑树

太过爱你忘了你带给我的痛 2023-06-11 03:28 214阅读 0赞

1.定义

红黑树是自平衡的二叉查找树。

2.性质

1)每个节点要么是黑色,要么是红色。

2)根节点为黑色。

3)每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)。

4)从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如插入、删除和查找某个值的最坏情况时间都要求与树的高度成比例,这个在高度上的理论上限允许红黑树在最坏情况下都是高效的,而不同于普通的二叉查找树。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 红黑树

在红黑树中,叶子被假定为nil或空,它不包含数据而只充当树在此结束的指示。

3.插入

假设我们现在要插入一个新的节点,如过插入的这个新的节点为黑色,那么必然会违反性质(4),所以我们把新插入的点定义为红色的。但是如果插入的新节点为红色,就可能会违反性质(3) ,出行双红的情况,因此我们需要对其进行调整,使得整棵树依然满足红黑树的性质,也就是双红修正。

以下为插入全过程:依次插入50,27,90,48,45,56,78,40,35

1)插入50,因为根结点为空,所以插入50为黑色。

2019103115390570.png

2) 插入27,27<50,插入到左子树。

20191031154447398.png

3)插入90,90>50插入到右子树

20191031154658750.png

4)插入48,48<50在根节点左子树,又大于27,插入到27右子树,因为不满足性质3,出现双红,所以调整,改变父亲和叔叔的颜色为黑色。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 1

5)插入45,首先右旋,将48作为新的结点插入,改变父亲节点45颜色,祖父结点27颜色,再左旋。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 2

6)插入56

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 3

7)插入78,先左旋,把56当作为新插入的结点,调整父亲78颜色和祖父90的颜色,再右旋

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 4

8)插入40

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 5

9)插入35

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3d6ejk1MzIwMDQ2Mw_size_16_color_FFFFFF_t_70 6

发表评论

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

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

相关阅读

    相关 数据结构

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

    相关 数据结构 -

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

    相关 数据结构_

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

    相关 数据结构--

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