对于红黑树插入固定,这本书区分了6个案例,其中3个是对称的。这些情况是(z是插入的节点):
案例2是案例3的子集,因为我们可以用左旋转将案例2转换为3。
然而,在本书的伪代码中,您可以看到这里或这里,它们编写如下:
if uncle.color == red:
# Handle case
else if z == z.p.right:
# Handle case 2
# Handle case 3这不应该是:
if uncle.color == red:
# Handle case
else:
if z == z.p.right:
# Handle case 2
# Handle case 3我是不是遗漏了什么?本书是否以不同于Python的方式使用else if?C++实现提供了这里使用第二个版本,正如我预期的那样。
发布于 2016-01-12 16:05:54
代码中的缩进很重要:
if uncle.color == red:
# Handle case
else if z == z.p.right:
# Handle case 2
# Handle case 3语法有点奇怪,因为它们挤压if,使其出现在与else相同的行上,但与其余的案例3相比,case 2进一步向内缩进,表明它们不属于同一个组。
我认为这就是作者的意图:
if (uncle.color == red)
{
# Handle case
}
else
{
if (z == z.p.right)
{
# Handle case 2
}
# Handle case 3
}https://softwareengineering.stackexchange.com/questions/307195
复制相似问题