红黑树~1子删除
Red Black Tree ~ 1 Child Deletes
红色父节点有可能只有一个黑色子节点吗?我一直在网上玩 Red/Black 树模拟器,但我无法设法让这种情况发生。
问这个问题的原因是我相信我的代码中有一个不必要的 IF...
if (temp_node->color == BLACK && node->color == RED)
{
node->color = BLACK;
global_violation = false;
}
感谢任何反馈!!
不,这不可能。
请记住,在 red/black 树中,从树根到树的所有路径都必须经过相同数量的黑色节点(这是 red/black 树不变量之一).
如果你有一个红色节点 x
和一个黑色 child y
,它不能有另一个红色 child(因为这打破了 red/black红色节点不能有红色的不变量 children).
这意味着通过x
到缺失的child的路径将比通过x
然后到y
的路径至少少经过一个黑色节点,然后从那里离开树,打破 red/black 树不变量。
视情况而定。
目前(2021 年 10 月)维基百科中至少有一张图有一个黑色节点。
如果这是一个混淆,明确排除单节点案例作为新规则可能会有所帮助。
红色父节点有可能只有一个黑色子节点吗?我一直在网上玩 Red/Black 树模拟器,但我无法设法让这种情况发生。
问这个问题的原因是我相信我的代码中有一个不必要的 IF...
if (temp_node->color == BLACK && node->color == RED)
{
node->color = BLACK;
global_violation = false;
}
感谢任何反馈!!
不,这不可能。
请记住,在 red/black 树中,从树根到树的所有路径都必须经过相同数量的黑色节点(这是 red/black 树不变量之一).
如果你有一个红色节点 x
和一个黑色 child y
,它不能有另一个红色 child(因为这打破了 red/black红色节点不能有红色的不变量 children).
这意味着通过x
到缺失的child的路径将比通过x
然后到y
的路径至少少经过一个黑色节点,然后从那里离开树,打破 red/black 树不变量。
视情况而定。
目前(2021 年 10 月)维基百科中至少有一张图有一个黑色节点。
如果这是一个混淆,明确排除单节点案例作为新规则可能会有所帮助。