l值必须是可修改的错误

时间:2014-10-03 10:25:30

标签: c++ pointers tree

这是一个修复红黑树的函数,但编译器一直给出l值必须是可修改的,' z'在while循环条件导致问题(z!= root)时,while应该r.un直到指向特定键的z指针到达键“' z'指针指向

void Tree::fixup(int z)
{
fixuppri(root, z);
}

 void Tree::fixuppri(node* root, int a)
{
node* z ;
z = returnnode(a);

while (z != root && z->parent->color = 'r')
{
    node* y;

    if (z->parent == z->parent->parent->left)
    {
        y = z->parent->parent->right;
    }
    else
    {
        y = z->parent->parent->left;
    }

    if (y->color = 'r')
    {
        z->parent->parent->color = 'r';
        z->parent->color = 'b';
        y->color = 'b';
        z = z->parent->parent;
    }
    else
    {
        if (z->parent == z->parent->parent->left && z == z->parent->left)
        {
            char tempcolor = z->parent->color;
            z->parent->color = z->parent->parent->color;
            z->parent->parent->color = tempcolor;
            rightrotate(z->parent->parent);
        }
        if (z->parent == z->parent->parent->left && z == z->parent->right)
        {
            char tempcolor = z->color;
            z->color = z->parent->parent->color;
            z->parent->parent->color = tempcolor;
            leftrotate(z->parent);
            rightrotate(z->parent->parent);
        }
        if (z->parent == z->parent->parent->right && z == z->parent->right)
        {
            char tempcolor = z->parent->color;
            z->parent->color = z->parent->parent->color;
            z->parent->parent->color = tempcolor;
            leftrotate(z->parent->parent);
        }
        if (z->parent == z->parent->parent->right && z == z->parent->left)
        {
            char tempcolor = z->color;
            z->color = z->parent->parent->color;
            z->parent->parent->color = tempcolor;
            rightrotate(z->parent);
            leftrotate(z->parent->parent);
        }
    }


}

root->color = 'b';
 }

1 个答案:

答案 0 :(得分:0)

这是一个简单的拼写错误,由于与运算符优先级的交互而导致混淆错误。

你写了=,你应该写==

&&的优先级低于==,但优先级高于=

这意味着

z != root && z->parent->color = 'r'

相当于

(z != root && z->parent->color) = 'r'

z != root && z->parent->color不是可修改的l值。