c++ - 红黑树~1子删除

标签 c++ c data-structures red-black-tree

有没有可能一个红色的父节点只有一个黑色的子节点?我一直在网上玩红/黑树模拟器,但我无法设法让这种情况发生。

问这个问题的原因是我相信我的代码中有一个不必要的 IF...

if (temp_node->color == BLACK && node->color == RED)
{
    node->color = BLACK;
    global_violation = false;
}

感谢您的任何反馈!

最佳答案

不,这是不可能的。

请记住,在红/黑树中,从树根到树的所有路径都必须经过相同数量的黑色节点(这是红/黑树不变量之一)。

如果你有一个红色节点 x 和一个黑色 child y,它不能有另一个红色 child (因为这打破了红色节点不能的红/黑不变量'没有红色的 child )。

这意味着通过 x 到丢失的 child 的路径将比通过 x 然后到 y< 的路径至少少一个黑色节点,然后从那里离开树,打破红/黑树不变量。

关于c++ - 红黑树~1子删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35262353/

相关文章:

c++ - 关于重载运算符的 ADL 或命名冲突是否有不同的规则?

Mavericks 升级后 OS X 上的 C++ 编译问题

data-structures - 链式哈希表与开放寻址哈希表

c# - 从字节数组读取 C# 中的 C/C++ 数据结构

c++ - 从 C++ 中的外部文件扫描整行

c++ - 类中定义的方法的地址

C的代码组织风格?

c - 嵌入式c编程

c - 即使在 fclose 之后使用 valgrind 也会出现内存泄漏问题

c++ - 如何高效地存储非常大的图空间并具有快速索引?