0

给定一个 RB 树,我需要编写一个算法来检查每个红色节点是否有两个子节点黑色。

ie 如果每个红色节点只有黑色子节点,则返回 true,否则返回 false。

这是我的尝试:

ChildCheck(x){
    if (x.color==black){
        if(x.leftChild !=null or x.leftchild!=nil)
            bool a = ChildCheck(x.leftChild)
        else  a = true
        if (x.rightChild!=null or x.leftchild!=nil){
            bool b = Childcheck(x.leftChild)
        else b = true
        return (a && b)
    }
    else
        if (x.leftChild !=null or x.leftchild!=nil)
            if(x.leftChild.color==black)
                d = true
            else d = false
        else
            d = true
        if (x.rightChild !=null or x.rightchild!=nil)
            if(x.rightChild.color==black)
                e = true
            else e = false
        else
            e = true
        return (d && e)
    }
}

这会返回正确的答案吗?如果不是,它有什么问题?

4

1 回答 1

2
bool CheckRedProperty(NodePtr root)
{
    if (root == NULL) 
        return true;

    if (!CheckRedProperty(root->left))
        return false;

    if (CheckRedProperty(root->right))
        return false;

    if (root->IsRed() 
        && (root->left && root->left->IsRed() || root->right && root->right->IsRed()))
            return false;
    return true;
}
于 2012-12-12T22:17:00.593 回答