繁体   English   中英

将 2-3-4 转换为红黑树

[英]Converting 2-3-4 to Red-Black Tree

我熟悉将单个 2 节点、3 节点和 4 节点直接转换为红黑树。 这个 Stackoverflow 链接是对 Red-Black 的一个很好的解释 2-3-4 但是,我对该链接中给出的示例有疑问。 这就是 Stackoverflow 问题 2-3-4 to red-black 的说明2-3-4 to Red-Black

我强调了我所质疑的部分。 为什么在这个指南上我找到了4 节点连接到 2 节点和互联网上的其他人,他们说当遇到连接到 2 或 3 节点的 4 节点时,你需要切换 colors。 但是在我突出显示红色的 StackOverflow 示例中,它们没有。 谢谢

下图并不表示红背树的colors需要交换:

3

它仅描述了拆分 B 树节点的过程,这导致相同数据的替代B 树。

然后它显示了 B 树的不同形状如何导致相应红黑树中的不同颜色,以及新颜色如何也是有效的替代方案。

但是从 B 树到红黑树的转换遵循您提到的规则:

如果我们查看图像的左侧,我们会在 B 树的底层看到一个 4 节点。 根据规则,这将转换为具有两个红色子节点(b 和 d)的黑色节点 (c)。 根处的 2 节点转换为黑色节点 (a)。

如果我们查看图像的右侧,我们会在 B 树的底层看到两个 2 节点。 这些将每个转换为一个后节点(b 和 d)。 根 3 节点被转换为以红色节点 (c) 作为子节点的后节点 (a)。

这正是图像底部所描绘的。 关键是这两个变体对于相同的数据是有效的红黑树,但源自不同形状的 B 树。

插入节点时可能需要这种从左到右版本的转换。 例如,如果要添加一个“e”,那么它不能在不重新着色的情况下添加为红黑树中“d”节点的子节点。 通过切换到红黑树的右侧版本,可以将节点添加为节点“d”的(红色)子节点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM