红黑树

363 阅读1分钟

参考文献:algs4.cs.princeton.edu/33balanced/

红黑树的实现

红黑树实质上就是平衡树设计的二叉树版本的实现

多值节点的编码

红黑树背后的思想就是在二叉树的基础上,为节点添加额外的信息来表示平衡树设计中的多值节点(3-node)。

我们将连接关系分为两类:第一类连接代表多值节点内元素之间的连接,这类连接被称为红色连接;另一类连接代表两个树根节点之间的连接,这类连接被称为黑色连接。我们为每个节点添加了一个 boolean 类型的属性来表示这个节点与父节点的连接类型。

特别地,我们令所有红色连接的方向都是左倾的,这样有助于减少状态的数量

3-node 的二叉树实现图

旋转

我们通过一个被称为旋转的操作来将红色链接由右倾转换为左倾。

首先,假设有一个右倾的链接,我们要把它转换为左倾。这个操作被称为左旋。

左旋示意图

右旋示意图

颜色反转

当一个黑色的父节点拥有两个红色的子节点时,那么将父节点和子节点的颜色全部反转。

颜色反转示意图