给定一个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)
}
}
这会回答正确的答案吗?如果不是,它有什么问题?
答案 0 :(得分: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;
}