数据结构 | 第8章 - 红黑树(上)

143 阅读4分钟

8.3 红黑树

平衡二叉搜索树的形式多样,且各具特色。

比如,8.1节的伸展树实现简便、无需修改节点结构、分摊复杂度低,但可惜最坏情况下的单次操作需要Ω(n)时间,故难以适用于核电站、医院等对可靠性和稳定性要求极高的场合

反之,7.4节的AVL树尽管可以保证最坏情况下的单次操作速度,但需在节点中嵌入平衡因子等标识;更重要的是,删除操作之后的重平衡可能需做多达Ω(logn)次旋转,从而频繁地导致全树整体拓扑结构的大幅度变化。

红黑树即是针对后一不足的改进。通过为节点指定颜色,并巧妙地动态调整

红黑树可保证:

在每次插入或删除操作之后的重平衡过程中,全树拓扑结构的更新仅涉及常数个节点。尽管最坏情况下需对多达Ω(logn)个节点重染色,但就分摊意义而言仅为O(1)个。

当然,为此首先需在AVL树“适度平衡”标准的基础上,进一步放宽条件。实际上,红黑树所采用的“适度平衡”标准,可大致表述为:任一节点左、右子树的高度,相差不得超过两倍

8.3.1 概述

  • 定义与条件

    image-20220722203008624.png

    由红、黑两色节点组成的二叉搜索树若满足以下条件,即为红黑树(red-black tree):

    (1) 树根始终为黑色

    (2) 外部节点均为黑色

    (3) 其余节点若为红色,则其孩子节点必为黑色

    (4) 从任一外部节点到根节点的沿途,黑节点的数目相等

    分析:

    条件(1)和(2)意味着红节点均为内部节点,且其父节点及左、右孩子必然存在。

    条件(3)意味着红节点之父必为黑色,因此树中任一通路都不含相邻的红节点

    由此可知,在从根节点通往任一节点的沿途,黑节点都不少于红节点。

    除去根节点本身,沿途所经黑节点的总数称作该节点的黑深度(black depth) ——根节点的黑深度为0,其余依此类推。故条件(4)亦可等效地理解和描述为“所有外部节点的黑深度统一”。

    由条件(4)可进一步推知,在从任一节点通往其任一后代外部节点的沿途,黑节点的总数亦必相等。除去(黑色)外部节点,沿途所经黑节点的总数称作该节点的黑高度(black height) ——所有外部节点的黑高度均为0,其余依此类推。

    特别地,根节点的黑高度亦称作全树的黑高度,在数值上与外部节点的黑深度相等。

  • (2,4)-树

    在红黑树与8.2节的4阶B-树之间,存在极其密切的联系,经适当转换之后,二者相互等价!

    具体地,自顶向下逐层考查红黑树各节点。每遇到一个红节点,都将对应的子树整体提升一层,从而与其父节点(黑)水平对齐,二者之间的联边则相应地调整为横向。

    image-20220722211829349.png

    可见,按照上述对应关系,每颗红黑树都等价于一颗(2,4)-树;前者的每一节点都对应于后者的一个关键码。

    通往黑节点的边,对黑高度有贡献,并在(2,4)-树中得以保留;通往红节点的边对黑高度没有贡献,在(2,4)-

    树中对应于节点内部一对相邻的关键码。在本节的插图中,这两类边将分别以实线、虚线示意

  • 平衡性

    尽管红黑树不能如完全树那样可做到理想平衡,也不如AVL树那样可以做到较严格的适度平衡,但其高度仍控制在最小高度的两倍以内,从渐近的角度看仍是O(logn),依然保证了适度平衡。

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情