我想创建一个遍历树的递归函数,第一次条件命中时,我希望它返回。这会是正确的吗?
bool nodeExists(Node *root, Node *target)
{
if(root == target)
{
return true;
}
for(int i = 0; i < root->nodes.size(); ++i)
{
if(nodeExists(root->nodes[i],target)) {return true;}
}
return false;
}
答案 0 :(得分:3)
这很好,但我宁愿使用与“节点”不同的标识符。 “孩子们”很好,因为它清晰而明确。
答案 1 :(得分:1)
我认为你写的正确。你测试过吗?
答案 2 :(得分:0)
看起来不错。虽然你应该真的测试你的代码,但也许你有任何指针错误。 (非常依赖你的Node类......)
答案 3 :(得分:0)
这样可行,因为return语句会自动退出该函数。另一种方式是:
bool nodeExists(Node *root, Node *target)
{
if(root == target)
{
return true;
}
bool returnValue = false;
for(int i = 0; i < root->nodes.size(); ++i)
{
if(nodeExists(root->nodes[i],target)) {returnValue = true; break;}
}
return returnValue;
}