【问题标题】:Red Black Tree Insertion & Deletion Uniqueness红黑树插入删除唯一性
【发布时间】:2022-12-16 07:33:31
【问题描述】:

我一直在学习并致力于实现红黑树数据结构。我正在关注this关于红黑树删除示例的文章,并查看示例 5:

当我将相同的节点插入我的树时,我得到以下信息:

我知道红黑树不是唯一的(我认为),因此上述两棵树都是有效的,因为它们不违反任何属性。

在示例文章中,删除节点 1 后,他们得到以下内容:

但是在我的代码中删除节点 1 之后,我得到以下信息:

因为在我的例子中,节点 1 是红色的,所以我没有调用我的 delete_fix 函数,它负责重新安排树等。我所遵循的删除算法只是声明如果要删除的节点是黑色的,则调用 delete_fix 函数。

然而,在将我的树与示例文章中的树进行比较后,我可以看到我的树并没有完全优化。它仍然遵循红黑树的规则。这是红黑树的预期还是我在这里遗漏了什么?

【问题讨论】:

  • 这是意料之中的。您在这里没有遗漏任何东西。

标签: data-structures tree binary-tree binary-search-tree red-black-tree


【解决方案1】:

然而,在将我的树与示例文章中的树进行比较后,我可以看到我的树并没有完全优化。

它是优化的。您的树将很快删除节点 5、7、20 和 28。其他只有 5 和 7。

请记住,对于红黑树,它们可能在一个方向上很茂密。如果实节点的黑树高度为N,则根到叶节点的最小路径为N(全黑),根到叶节点的最大路径为2 * N(或者黑-红-黑-红等)。如果您尝试将新节点添加到最大高度的浓密路径,树将重新着色和/或重新平衡。

如果你想要一个更平衡的搜索树,你应该使用 AVL 树。红黑树倾向于最小化插入/删除修复而不是查找节点。你的树很好。

【讨论】: