algorithm - 红黑树红 child 属性检查

标签 algorithm data-structures recursion red-black-tree

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

即如果每个红色节点只有黑色子节点,则返回 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)
    }
}

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

最佳答案

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;
}

关于algorithm - 红黑树红 child 属性检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848651/

相关文章:

java - 客户端未连接到服务器

c - C 中的 Stackoverflow : too many recursive calls ?

javascript - 递归 .children() 以搜索 id 属性

javascript - 递归打印字符串的所有排列(Javascript)

php - 检测数组 PHP 中的循环

php - 如何从服务器获取多个数据

data-structures - 按添加顺序保留其键的 map

performance - 在无限长的排序数组中查找一个元素

algorithm - 计算 cargo 需要多少辆卡车(后续)

c - 我有一个关于 C 中稀疏矩阵乘法代码的问题